diff options
Diffstat (limited to 'core/js/dist/maintenance.js.map')
-rw-r--r-- | core/js/dist/maintenance.js.map | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/core/js/dist/maintenance.js.map b/core/js/dist/maintenance.js.map index ea14592d298..b96530f7457 100644 --- a/core/js/dist/maintenance.js.map +++ b/core/js/dist/maintenance.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./core/src/OC/legacy-loader.js","webpack:///./core/src/OC/notification.js","webpack:///./core/src/OC/xhr-error.js","webpack:///./core/src/OC/appconfig.js","webpack:///./core/src/OC/appsettings.js","webpack:///./core/src/OC/appswebroots.js","webpack:///./core/src/OC/backbone-webdav.js","webpack:///./core/src/OC/backbone.js","webpack:///./core/src/OC/path.js","webpack:///./core/src/OC/config.js","webpack:///./core/src/OC/currentuser.js","webpack:///./core/src/OC/dialogs.js","webpack:///./core/src/OC/eventsource.js","webpack:///./core/src/OC/get_set.js","webpack:///./core/src/OC/capabilities.js","webpack:///./core/src/OC/host.js","webpack:///./core/src/OC/menu.js","webpack:///./core/src/OC/admin.js","webpack:///./core/src/OC/msg.js","webpack:///./core/src/OC/plugins.js","webpack:///./core/src/OC/search.js","webpack:///./core/src/OC/theme.js","webpack:///./core/src/OC/util-history.js","webpack:///./core/src/OC/util.js","webpack:///./core/src/OC/debug.js","webpack:///./core/src/OC/navigation.js","webpack:///./core/src/OC/webroot.js","webpack:///./core/src/OC/index.js","webpack:///./core/src/OC/constants.js","webpack:///./core/src/OC/routing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/backbone/backbone.js","webpack:///./core/src/OC/l10n-registry.js","webpack:///./core/src/OC/l10n.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./core/src/OC/requesttoken.js","webpack:///./core/src/OCP/appconfig.js","webpack:///./node_modules/dompurify/dist/purify.js","webpack:///./core/src/OCA/index.js","webpack:///./node_modules/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./core/src/OC/query-string.js","webpack:///./core/src/OC/apps.js","webpack:///./node_modules/davclient.js/lib/client.js","webpack:///./core/src/OC/password-confirmation.js","webpack:///./core/src/Util/human-file-size.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./core/src/OC/contactsmenu.js","webpack:///./node_modules/toastify-js/src/toastify.js","webpack:///./node_modules/nextcloud-axios/dist/client.js","webpack:///./core/src/OC/contactsmenu/contact.handlebars","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./core/src/OC/contactsmenu/loading.handlebars","webpack:///./core/src/OC/contactsmenu/error.handlebars","webpack:///./core/src/OC/contactsmenu/menu.handlebars","webpack:///./core/src/OC/contactsmenu/list.handlebars","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/node_modules/is-buffer/index.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./core/src/maintenance.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","factory","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","support","document","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","isArraylike","obj","length","type","isWindow","nodeType","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","Error","noop","Array","isNumeric","parseFloat","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","e","els","seed","match","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","dir","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","matcher","unmatched","innerText","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","disabled","checked","selected","selectedIndex","radio","checkbox","file","password","image","submit","reset","tokens","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","needsContext","rsingleTag","risSimple","winnow","qualifier","not","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","sibling","until","truncate","has","targets","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","readyList","rnotwhite","optionsCache","completed","removeEventListener","Callbacks","flag","createOptions","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","fire","data","stopOnFalse","disable","remove","empty","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","values","notifyWith","resolveWith","readyWait","holdReady","hold","wait","triggerHandler","off","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","Data","uid","acceptData","owner","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","button","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","focus","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","optgroup","tbody","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","fragment","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","opener","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","computePixelPositionAndBoxSizingReliable","cssText","divStyle","backgroundClip","clearCloneStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","Tween","easing","cssHooks","opacity","cssNumber","cssProps","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","opts","oldfire","anim","dataShow","unqueued","overflow","overflowX","overflowY","createTween","tweeners","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","Animation","properties","stopped","tick","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","propFilter","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","bool","nodeHook","propName","attrNames","propFix","rfocusable","removeProp","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","processData","async","contentType","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus","0","1223","xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","_jQuery","_$","$","noConflict","w","hookCallback","some","isObject","isUndefined","isNumber","isDate","res","hasOwnProp","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","copyConfig","from","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","absFloor","number","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","min","lengthDiff","abs","diffs","warn","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","Function","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","modMonth","x","mod","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toObject","toDate","toISOString","keepOffset","zone","toJSON","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","root","previousUnderscore","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","Ctor","_wrapped","VERSION","builtinIteratee","optimizeCb","argCount","accumulator","cb","iteratee","identity","Infinity","restArguments","startIndex","rest","baseCreate","shallowProperty","path","deepGet","MAX_ARRAY_INDEX","getLength","isArrayLike","collect","currentKey","createReduce","reducer","memo","initial","reduce","foldl","inject","reduceRight","foldr","detect","predicate","findIndex","findKey","negate","every","any","includes","include","item","fromIndex","guard","invoke","contextPath","pluck","where","findWhere","lastComputed","shuffle","sample","rand","sortBy","criteria","right","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","isString","pass","take","tail","drop","compact","Boolean","flatten","shallow","isArguments","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","mid","createIndexFinder","predicateFind","lastIndexOf","range","chunk","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","callArgs","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","throttle","previous","later","leading","throttled","trailing","cancel","debounce","immediate","debounced","callNow","wrapper","compose","times","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","functions","methods","createAssigner","keysFunc","extendOwn","assign","deepEq","keyInObj","pick","omit","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","nodelist","Int8Array","isSymbol","isNull","constant","propertyOf","accum","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","escapeChar","template","oldSettings","render","variable","chain","instance","_chain","chainResult","mixin","loadedScripts","loadedStyles","addScript","app","OC","filePath","addStyle","createStyleSheet","updatableNotification","getDefaultNotificationFunction","setDefault","$row","toastify","hideToast","showHtml","isHTML","toast","OCP","Toast","message","toastElement","showUpdate","showTemporary","ajaxConnectionLostHandler","Notification","processAjaxError","_reloadCalled","currentUser","_userIsNavigatingAway","reload","_ajaxConnectionLostHandler","registerXHRForErrorProcessing","appConfig","oc_appconfig","AppConfig","getValue","setValue","getApps","getKeys","deleteKey","appSettings","appid","scriptName","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","_oc_appswebroots","methodMap","update","patch","delete","read","urlError","parsePropFindResult","davProperties","subResult","propStat","propKey","parseIdFromLocation","queryPos","isSuccessStatus","convertModelAttributesToDavProperties","changedProp","callPropFind","client","propFind","depth","propsMapping","callPropPatch","propPatch","changed","callMkCol","request","callMethod","responseJson","locationHeader","davCall","dav","Client","baseUrl","xmlNamespaces","resolveUrl","requestToken","davSync","Backbone","isCollection","Collection","hasInnerCollection","usePUT","stringify","textStatus","errorThrown","VendorBackbone","encodePath","basename","dirname","isSamePath","path1","path2","pathSections1","pathSections2","joinPaths","nonEmptyArgs","lastArg","leadingSlash","trailingSlash","sections","acc","section","_oc_config","rawUid","displayName","getCurrentUser","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","dialogsCounter","alert","title","modal","OK_BUTTON","info","confirm","confirmHtml","prompt","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","label","buttonlist","ocdialog","defaultButton","closeOnEscape","buttons","filepicker","multiselect","mimetypeFilter","sortField","loading","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","Files","getClient","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","Util","isIE","$showGridView","_onGridviewChange","_getGridSettings","newButton","registerMenu","$input","$form","newName","lastPos","selectRange","filename","isFileNameValid","tooltip","placement","checkInput","newname","createDirectory","_fillFilePicker","hideMenus","keypress","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","functionToCall","returnType","datapath","element","selectedName","buttonEnableDisable","dialogType","allowHtml","escapeFunction","_fileexistsshown","fileexists","replacement","controller","dialogDeferred","crop","img","canvas","getContext","drawImage","resampleHermite","toDataURL","H","W2","H2","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ratio_h_half","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","dy","center_x","w0","xx","dx","sqrt","clearRect","putImageData","addConflict","$conflicts","$conflict","$originalDiv","$replacementDiv","humanFileSize","formatDate","mtime","lastModifiedDate","directory","urlSpec","forceIcon","previewpath","generatePreviewUrl","FileReader","reader","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","Image","readAsArrayBuffer","getCroppedPreview","MimeType","getIconUrl","checkboxId","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","generateUrl","gridview","post","$filePickerTemplate","tmpl","$listTmpl","$messageTemplate","$fileexistsTemplate","_getFileList","mimetypes","getFolderContents","files","mimetype","Comparators","fileInfo1","fileInfo2","naturalSortCompare","comparator","file1","file2","isFavorite","fileInfo","tags","TAG_FAVORITE","_fillSlug","entry","simpleSize","sizeColor","icon","filename1","filename2","relativeModifiedDate","previewUrl","$template","paths","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","getToken","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","onmessage","listen","fallBackCallBack","lastLength","capabilities","_oc_capabilities","getCapabilities","getProtocol","protocol","getHost","host","getHostName","hostname","getPort","port","currentMenu","$toggle","$menuEl","headerMenu","menuSpeed","unregisterMenu","lastMenu","showMenu","isAdmin","_oc_isadmin","isUserAdmin","startSaving","startAction","finishedSaving","finishedAction","finishedSuccess","finishedError","_plugins","register","targetName","plugin","plugins","getPlugins","attach","targetObject","search","query","Search","customResults","resultTypes","theme","_theme","_handlers","_pushState","strParams","buildQueryString","history","pushState","pathname","navigator","userAgent","patterns","fill","stroke","replaceState","_cancelPop","addOnPopStateHandler","_parseHashQuery","_decodeQuery","parseUrlQuery","parseQueryString","_onPopState","chunkify","tz","History","computerFileSize","bytes","timestamp","moment","getScrollBarWidth","_scrollBarWidth","inner","outer","w1","w2","clientWidth","stripTime","aa","bb","aNum","Number","bNum","localeCompare","getLanguage","waitFor","internalCallback","isCookieSetToValue","cookies","cookie","_oc_debug","debug","redirect","targetURL","webroot","_oc_webroot","coreApps","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","fileIsBlacklisted","Config","blacklist_files_regex","Apps","ContactsMenu","dialogs","L10N","_processAjaxError","_capabilities","getCanonicalLocale","addTranslations","PasswordConfirmation","Plugins","getRootPath","imagePath","getRequestToken","linkTo","linkToOCS","linkToRemote","linkToRemoteBase","subscribeToRequestTokenChange","service","allOptions","_build","vars","modRewriteWorking","isCore","link","substring","encodeURI","escapeExpression","toHTML","possible","badChars","createFrame","frame","_parent","blockParams","ids","appendContextPath","chr","previousBackbone","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","listeningTo","_listeningTo","Listening","tryCatchOn","offApi","stopListening","_callback","cleanup","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","listener","Model","preinitialize","cid","cidPrefix","initialize","validationError","idAttribute","sync","_validate","unset","silent","changes","changing","_changing","_previousAttributes","_pending","clear","hasChanged","changedAttributes","previousAttributes","fetch","resp","serverAttrs","wrapError","save","validate","isNew","destroy","models","_reset","setOptions","addOptions","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","prevId","$$iterator","iterator","kind","_collection","_kind","_index","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","eventName","_createElement","_setAttributes","addUnderscoreMethods","Class","attribute","defaultVal","addMethod","modelMatcher","Base","mappings","_method","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","route","isRegExp","_routeToRegExp","router","_extractParameters","execute","navigate","optional","decodeURIComponent","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","_hasPushState","rootPath","iWindow","contentWindow","_checkUrlInterval","loadUrl","detachEvent","decodedFragment","_updateHash","protoProps","staticProps","child","__super__","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","registerAppTranslations","appId","translations","pluralFunction","hasAppTranslations","getAppTranslations","L10n","appName","pluralForm","bundle","_getPlural","_unregister","translate","translation","DOMPurify","sanitize","escapeHTML","translatePlural","textSingular","textPlural","plural","language","Handlebars","registerHelper","isBuffer","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isFile","isBlob","isStream","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","product","assignValue","deepMerge","thisArg","str","observers","subscribe","observer","setToken","newToken","endpoint","requiresPasswordConfirmation","requirePasswordConfirmation","freeze$1","freeze","svg","svgFilters","mathMl","freeze$2","html$1","svg$1","mathMl$1","setPrototypeOf","apply$1","Reflect","addToSet","lcElement","newObject","thisValue","seal","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","_typeof","_toConsumableArray","arr2","arraySlice","getGlobal","_createTrustedTypesPolicy","trustedTypes","createPolicy","currentScript","policyName","createHTML","html$$1","createDOMPurify","isSupported","originalDocument","useDOMParser","removeSVGAttr","removeTitle","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","Text","Comment","TrustedTypes","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","importNode","createHTMLDocument","MUSTACHE_EXPR$$1","ERB_EXPR$$1","DATA_ATTR$$1","ARIA_ATTR$$1","IS_SCRIPT_OR_DATA$$1","ATTR_WHITESPACE$$1","IS_ALLOWED_URI$$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_JQUERY","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_DOM_IMPORT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","CONFIG","formElement","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","_forceRemove","outerHTML","_removeAttribute","_initDocument","dirty","leadingWhitespace","querySelector","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","FILTER_ACCEPT","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","elm","allowedTags","insertAdjacentHTML","htmlToInsert","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","idAttr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","namespaceURI","setAttributeNS","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","importedNode","oldNode","returnNode","toStaticHTML","nodeIterator","serializedHTML","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","errorProps","Exception","loc","line","column","captureStackTrace","lineNumber","nop","g","_interopRequireDefault","_interopRequireWildcard","newObj","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","_handlebarsNoConflict2","hb","HandlebarsEnvironment","SafeString","VM","spec","inst","queryString","components","part","build","dynamicSlideToggleEnabled","enableDynamicSlideToggle","registerAppsSlideToggle","areaSelector","area","hideArea","showArea","_XML_CHAR_MAP","_escapeXml","ch","userName","parseClarkNotation","_renderPropSet","propValue","mkcol","xhrProvider","btoa","Promise","fulfill","onreadystatechange","resultBody","parseMultiStatus","ontimeout","_parsePropNode","propNode","subNodes","xmlBody","resolver","foo","responseIterator","XPathResult","ANY_TYPE","responseNode","iterateNext","stringValue","propStatIterator","propStatNode","propIterator","localName","baseParts","parseUrl","subString","scheme","propertyName","pageLoadTime","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","_confirmPassword","$dialog","$error","$buttons","lastLogin","skipSmallSizes","humanList","order","log","readableFormat","relativeSize","toLocaleString","webpackPolyfill","_utils","_exception2","_helpers","_decorators","_logger2","COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","helpers","partials","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","unregisterHelper","registerPartial","unregisterPartial","registerDecorator","unregisterDecorator","symbolMap","numberMap","plurals","pluralize","f","weekdaysParseExact","suffixes","8","70","80","20","50","100","9","10","30","60","90","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","monthsParseExact","ll","lll","llll","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","word","numberAsNoun","processHoursFunction","Contact","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","ContactCollection","ContactsListView","_subViews","contact","ContactsListItemView","_onChildActionMenuToggle","$src","view","_template","_model","_actionMenuShown","contactTemplate","require","_onOtherActionMenuOpened","imageplaceholder","_onToggleActionsMenu","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","menu","_onSearch","searchTerm","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","_getContacts","term","catch","Toastify","lib","containsClass","yourClass","destination","newWindow","gravity","positionLeft","backgroundColor","avatar","stopOnFocus","buildToast","divElement","background","avatarElement","insertAdjacentElement","closeElement","removeElement","parentElement","timeOutValue","innerWidth","screen","showToast","rootElement","reposition","classUsed","topLeftOffsetSize","bottom","topRightOffsetSize","offsetSize","allToasts","default","requesttoken","depth0","stack1","alias1","lambda","alias2","topAction","hyperlink","secondAction","nullContext","program","helper","helperMissing","alias4","alias3","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","inverse","_exception","execIteration","priorKey","conditional","includeZero","level","_decoratorsInline2","_decoratorsInline","lookupLevel","levelMap","_len","_key","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","lookup","depths","invokePartial","resolvePartial","compilerOptions","indent","lines","programs","declaredBlockParams","programWrapper","wrapProgram","common","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","usePartial","useDecorators","_child","currentPartialBlock","partialBlock","prog","currentDepths","$Handlebars","unless","webpackContext","req","webpackContextResolve","utils","encode","paramsSerializer","serializedParams","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","process","transformRequest","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","settle","buildURL","parseHeaders","isURLSameOrigin","createError","requestData","auth","Authorization","responseURL","responseType","onabort","xsrfValue","withCredentials","onDownloadProgress","onUploadProgress","upload","cancelToken","enhanceError","config1","config2","Cancel","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","browser","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","InterceptorManager","dispatchRequest","interceptors","fulfilled","rejected","getUri","use","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","reason","normalizedName","isAxiosError","description","fileName","columnNumber","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","requestURL","expires","domain","secure","toGMTString","relativeURL","executor","resolvePromise","maintenance"],"mappings":"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","file":"maintenance.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 577);\n","/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-04-28T16:01Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.0-pre\n * http://sizzlejs.com/\n *\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-12-16\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\tnodeType = context.nodeType;\n\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\tif ( !seed && documentIsHTML ) {\n\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType !== 1 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\tparent = doc.defaultView;\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Support tests\n\t---------------------------------------------------------------------- */\n\tdocumentIsHTML = !isXML( doc );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\f]' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// We once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android<4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android<4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Support: Firefox, Chrome, Safari\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optimization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tif ( elem.ownerDocument.defaultView.opener ) {\n\t\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t\t}\n\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\t\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// Swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur(),\n\t\t\t\t// break the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// Toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = window.location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// Support: BlackBerry 5, iOS 3 (original iPhone)\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Support: Safari<7+, Chrome<37+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate (y) {\n var date;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n var args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays (ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays :\n this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n : (m) ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var 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{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000;\n var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month': return months;\n case 'quarter': return months / 3;\n case 'year': return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.24.0';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}());\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param ready event handler to be called when the script is loaded\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = OC.filePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = OC.filePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport Toastify from 'toastify-js'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use OCP.Toast\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param callback\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tsetDefault: function (callback) {\n\t\tthis.getDefaultNotificationFunction = callback;\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\thide: function ($row, callback) {\n\t\tvar self = this;\n\t\tvar $notification = $('#content');\n\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row;\n\t\t\t$row = undefined;\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification');\n\t\t\treturn;\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function () {\n\t\t\t$(this)[0].toastify.hideToast()\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {Object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowHtml: function (html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? -1 : options.timeout\n\t\tconst toast = window.OCP.Toast.message(html, options)\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {Object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshow: function (text, options) {\n\t\toptions = options || {};\n\t\toptions.timeout = (!options.timeout) ? -1 : options.timeout;\n\t\tconst toast = window.OCP.Toast.message(text, options);\n\t\treturn $(toast.toastElement);\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowUpdate: function (text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast();\n\t\t}\n\t\tthis.updatableNotification = OCP.Toast.message(text, {timeout: -1})\n\t\treturn $(this.updatableNotification.toastElement);\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {array} [options] options array\n\t * @param {int} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowTemporary: function (text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || 7;\n\t\tconst toast = window.OCP.Toast.message(text, options);\n\t\treturn $(toast.toastElement);\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tisHidden: function () {\n\t\treturn !$('#content').find('.toastify').length;\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, {trailing: false})\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function () {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function () {\n\t\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimer++\n\t\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function () {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {getValue, setValue, getApps, getKeys, deleteKey} from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function (app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function (app, key, value) {\n\t\tsetValue(app, key, value);\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function (callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function (app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function (app, key) {\n\t\tdeleteKey(app, key);\n\t}\n\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\nimport {filePath} from './routing'\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = {scriptName: 'settings.php', cache: true}\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(filePath(props.appid, '', props.scriptName), function (data) {\n\t\t\tpopup.html(data).ready(function () {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function () {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({cache: true})\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(filePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function (jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/**\n * Webdav transport for Backbone.\n *\n * This makes it possible to use Webdav endpoints when\n * working with Backbone models and collections.\n *\n * Requires the davclient.js library.\n *\n * Usage example:\n *\n * var PersonModel = OC.Backbone.Model.extend({\n * // make it use the DAV transport\n * sync: OC.Backbone.davSync,\n *\n * // DAV properties mapping\n * davProperties: {\n * 'id': '{http://example.com/ns}id',\n * 'firstName': '{http://example.com/ns}first-name',\n * 'lastName': '{http://example.com/ns}last-name',\n * 'age': '{http://example.com/ns}age'\n * },\n *\n * // additional parsing, if needed\n * parse: function(props) {\n * // additional parsing (DAV property values are always strings)\n * props.age = parseInt(props.age, 10);\n * return props;\n * }\n * });\n *\n * var PersonCollection = OC.Backbone.Collection.extend({\n * // make it use the DAV transport\n * sync: OC.Backbone.davSync,\n *\n * // use person model\n * // note that davProperties will be inherited\n * model: PersonModel,\n *\n * // DAV collection URL\n * url: function() {\n * return OC.linkToRemote('dav') + '/person/';\n * },\n * });\n */\n\nimport _ from 'underscore';\nimport dav from 'davclient.js';\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n};\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError () {\n\tthrow new Error('A \"url\" property or function must be specified');\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult (result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function (subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties);\n\t\t});\n\t}\n\tvar props = {\n\t\thref: result.href\n\t};\n\n\t_.each(result.propStat, function (propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key;\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key];\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key];\n\t\t}\n\t});\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href);\n\t}\n\n\treturn props;\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @return {string} id\n */\nfunction parseIdFromLocation (url) {\n\tvar queryPos = url.indexOf('?');\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos);\n\t}\n\n\tvar parts = url.split('/');\n\tvar result;\n\tdo {\n\t\tresult = parts[parts.length - 1];\n\t\tparts.pop();\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0);\n\n\treturn result;\n}\n\nfunction isSuccessStatus (status) {\n\treturn status >= 200 && status <= 299;\n}\n\nfunction convertModelAttributesToDavProperties (attrs, davProperties) {\n\tvar props = {};\n\tvar key;\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key];\n\t\tvar value = attrs[key];\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key);\n\t\t\tchangedProp = key;\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value;\n\t\t}\n\t\tprops[changedProp] = value;\n\t}\n\treturn props;\n}\n\nfunction callPropFind (client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function (response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties);\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping);\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift();\n\t\t\t\t}\n\n\t\t\t\toptions.success(results);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response);\n\t\t}\n\t});\n}\n\nfunction callPropPatch (client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function (result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON());\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result);\n\t\t}\n\t});\n\n}\n\nfunction callMkCol (client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function (result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers);\n\t});\n}\n\nfunction callMethod (client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json';\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function (result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON();\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location');\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader);\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties);\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping));\n\t\t\t} else {\n\t\t\t\toptions.success(result.body);\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t});\n\tclient.resolveUrl = function () {\n\t\treturn options.url;\n\t};\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers);\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers);\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers);\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers);\n\t} else {\n\t\treturn callMethod(client, options, model, headers);\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = {type: methodMap[method] || method};\n\tvar isCollection = (model instanceof Backbone.Collection);\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL';\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT';\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError();\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options));\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false;\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties;\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties;\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model);\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties;\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties);\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1;\n\t\t\t} else {\n\t\t\t\toptions.depth = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error;\n\toptions.error = function (xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus;\n\t\toptions.errorThrown = errorThrown;\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown);\n\t\t}\n\t};\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model);\n\tmodel.trigger('request', model, xhr, options);\n\treturn xhr;\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport VendorBackbone from 'backbone';\nimport {davCall, davSync} from './backbone-webdav';\n\nconst Backbone = VendorBackbone.noConflict();\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n});\n\nexport default Backbone;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * URI-Encodes a file path but keep the path slashes.\n *\n * @param {String} path\n * @return {String} encoded path\n */\nexport const encodePath = path => {\n\tif (!path) {\n\t\treturn path\n\t}\n\tconst parts = path.split('/')\n\tconst result = []\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tresult.push(encodeURIComponent(parts[i]))\n\t}\n\treturn result.join('/')\n}\n\n/**\n * Returns the base name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"somefile.txt\"\n *\n * @param {String} path\n * @return {String} base name\n */\nexport const basename = path => path.replace(/\\\\/g, '/').replace(/.*\\//, '')\n\n/**\n * Returns the dir name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"/abc\"\n *\n * @param {String} path\n * @return {String} dir name\n */\nexport const dirname = path => path.replace(/\\\\/g, '/').replace(/\\/[^\\/]*$/, '')\n\n/**\n * Returns whether the given paths are the same, without\n * leading, trailing or doubled slashes and also removing\n * the dot sections.\n *\n * @param {String} path1 first path\n * @param {String} path2 second path\n * @return {bool} true if the paths are the same\n *\n * @since 9.0\n */\nexport const isSamePath = (path1, path2) => {\n\tconst pathSections1 = (path1 || '').split('/').filter(p => p !== '.')\n\tconst pathSections2 = (path2 || '').split('/').filter(p => p !== '.')\n\tpath1 = joinPaths.apply(undefined, pathSections1)\n\tpath2 = joinPaths.apply(undefined, pathSections2)\n\n\treturn path1 === path2\n}\n\n/**\n * Join path sections\n *\n * @param {...String} path sections\n *\n * @return {String} joined path, any leading or trailing slash\n * will be kept\n *\n * @since 8.2\n */\nexport const joinPaths = (...args) => {\n\tif (arguments.length < 1) {\n\t\treturn ''\n\t}\n\n\t// discard empty arguments\n\tconst nonEmptyArgs = args.filter(arg => arg.length > 0)\n\tif (nonEmptyArgs.length < 1) {\n\t\treturn ''\n\t}\n\n\tconst lastArg = nonEmptyArgs[nonEmptyArgs.length - 1]\n\tconst leadingSlash = nonEmptyArgs[0].charAt(0) === '/'\n\tconst trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';\n\tconst sections = nonEmptyArgs.reduce((acc, section) => acc.concat(section.split('/')), [])\n\n\tlet first = !leadingSlash\n\tconst path = sections.reduce((acc, section) => {\n\t\tif (section === '') {\n\t\t\treturn acc\n\t\t}\n\n\t\tif (first) {\n\t\t\tfirst = false\n\t\t\treturn acc + section\n\t\t}\n\n\t\treturn acc + '/' + section\n\t}, '')\n\n\tif (trailingSlash) {\n\t\t// add it back\n\t\treturn path + '/'\n\t}\n\treturn path\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/* global alert */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\t/**\n\t * displays alert dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses OK\n\t * @param modal make the dialog modal\n\t */\n\talert: function (text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t);\n\t},\n\t/**\n\t * displays info dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses OK\n\t * @param modal make the dialog modal\n\t */\n\tinfo: function (text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal);\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t */\n\tconfirm: function (text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t);\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t */\n\tconfirmHtml: function (text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t);\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t * @param name name of the input field\n\t * @param password whether the input should be a password input\n\t */\n\tprompt: function (text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function ($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content';\n\t\t\tvar dialogId = '#' + dialogName;\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t});\n\t\t\tvar input = $('<input/>');\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name);\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ');\n\t\t\t$dlg.append(label);\n\t\t\t$dlg.append(input);\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\t$('body').append($dlg);\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback);\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function () {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(false, input.val());\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function () {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(true, input.val());\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}\n\t\t\t];\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function () {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(false, input.val());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tinput.focus();\n\t\t\tDialogs.dialogsCounter++;\n\t\t});\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses Choose\n\t * @param multiselect whether it should be possible to select multiple files\n\t * @param mimetypeFilter mimetype to filter by - directories will always be included\n\t * @param modal make the dialog modal\n\t * @param type Type of file picker : Choose, copy, move, copy and move\n\t * @param path path to the folder that the the file can be picket from\n\t * @param options additonal options that need to be set\n\t */\n\tfilepicker: function (title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this;\n\n\t\tthis.filepicker.sortField = 'name';\n\t\tthis.filepicker.sortOrder = 'asc';\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE;\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here');\n\t\tvar newText = t('files', 'New folder');\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here');\n\t\t}\n\n\t\tthis.filepicker.loading = true;\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient();\n\n\t\tthis.filelist = null;\n\t\tpath = path || '';\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function ($tmpl) {\n\t\t\tself.filepicker.loading = false;\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content';\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close');\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = [];\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === \"string\") {\n\t\t\t\tmimetypeFilter = [mimetypeFilter];\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false;\n\t\t\t}\n\n\t\t\t// No grid for IE!\n\t\t\tif (OC.Util.isIE()) {\n\t\t\t\tself.$filePicker.find('#picker-view-toggle').remove();\n\t\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid');\n\t\t\t}\n\n\t\t\t$('body').append(self.$filePicker);\n\n\t\t\tself.$showGridView = $('input#picker-showgridview');\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self));\n\n\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\tself._getGridSettings();\n\t\t\t}\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add');\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tnewButton.hide();\n\t\t\t}\n\t\t\tnewButton.on('focus', function () {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function () {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewButton.click();\n\t\t\t\t});\n\t\t\t});\n\t\t\tnewButton.on('blur', function () {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback');\n\t\t\t});\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function () {\n\t\t\t\t$input.focus();\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function () {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tself.$form.submit();\n\t\t\t\t});\n\t\t\t\tvar newName = $input.val();\n\t\t\t\tvar lastPos = newName.lastIndexOf('.');\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length;\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos);\n\t\t\t});\n\t\t\tvar $form = self.$filePicker.find('.filenameform');\n\t\t\tvar $input = $form.find('input[type=\\'text\\']');\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']');\n\t\t\t$submit.on('click', function (event) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\t$form.submit();\n\t\t\t});\n\n\t\t\tvar checkInput = function () {\n\t\t\t\tvar filename = $input.val();\n\t\t\t\ttry {\n\t\t\t\t\tif (!Files.isFileNameValid(filename)) {\n\t\t\t\t\t\t// Files.isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function (file) {\n\t\t\t\t\t\treturn file.name === this;\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', {newName: filename}, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error);\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t});\n\t\t\t\t\t$input.tooltip('fixTitle');\n\t\t\t\t\t$input.tooltip('show');\n\t\t\t\t\t$input.addClass('error');\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\t$form.on('submit', function (event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val();\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + newname);\n\t\t\t\t\t});\n\t\t\t\t\tOC.hideMenus();\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback');\n\t\t\t\t\tself.$filePicker.click();\n\t\t\t\t\t$input.val(newText);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$input.keypress(function (event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t$form.submit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.$filePicker.ready(function () {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr');\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody');\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container');\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree');\n\t\t\t\tself.$dirTree.on('click', 'div:not(:last-child)', self, function (event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type);\n\t\t\t\t});\n\t\t\t\tself.$filelist.on('click', 'tr', function (event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type);\n\t\t\t\t});\n\t\t\t\tself.$fileListHeader.on('click', 'a', function (event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path');\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort');\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc';\n\t\t\t\t\tself._fillFilePicker(dir);\n\t\t\t\t});\n\t\t\t\tself._fillFilePicker(path);\n\t\t\t});\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function (returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath;\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = [];\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function (index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'));\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path');\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname');\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType);\n\t\t\t\t\tself.$filePicker.ocdialog('close');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar chooseCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE);\n\t\t\t};\n\n\t\t\tvar copyCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY);\n\t\t\t};\n\n\t\t\tvar moveCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE);\n\t\t\t};\n\n\t\t\tvar buttonlist = [];\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside',\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove();\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog');\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary');\n\t\t\tif (self.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1 && !self.$filePicker.data('.allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t\t}\n\t\t})\n\t\t\t.fail(function (status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false;\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', {error: error}));\n\t\t\t\t}\n\t\t\t});\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function (content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function ($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content';\n\t\t\tvar dialogId = '#' + dialogName;\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? {escapeFunction: ''} : {});\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\t$('body').append($dlg);\n\t\t\tvar buttonlist = [];\n\t\t\tswitch (buttons) {\n\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\tcallback(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t\t}];\n\t\t\t\t\tbreak;\n\t\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\t\tvar functionToCall = function () {\n\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t});\n\t\t\tDialogs.dialogsCounter++;\n\t\t})\n\t\t\t.fail(function (status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content);\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', {error: error}));\n\t\t\t\t}\n\t\t\t});\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @return {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function (data, original, replacement, controller) {\n\t\tvar self = this;\n\t\tvar dialogDeferred = new $.Deferred();\n\n\t\tvar getCroppedPreview = function (file) {\n\t\t\tvar deferred = new $.Deferred();\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift();\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader();\n\t\t\t\treader.onload = function (e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result]);\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL;\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob);\n\t\t\t\t\tvar image = new Image();\n\t\t\t\t\timage.src = originalUrl;\n\t\t\t\t\timage.onload = function () {\n\t\t\t\t\t\tvar url = crop(image);\n\t\t\t\t\t\tdeferred.resolve(url);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t} else {\n\t\t\t\tdeferred.reject();\n\t\t\t}\n\t\t\treturn deferred;\n\t\t};\n\n\t\tvar crop = function (img) {\n\t\t\tvar canvas = document.createElement('canvas'),\n\t\t\t\ttargetSize = 96,\n\t\t\t\twidth = img.width,\n\t\t\t\theight = img.height,\n\t\t\t\tx, y, size;\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0;\n\t\t\t\tx = (width - height) / 2;\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2;\n\t\t\t\tx = 0;\n\t\t\t}\n\t\t\tsize = Math.min(width, height);\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size;\n\t\t\tcanvas.height = size;\n\t\t\tvar ctx = canvas.getContext(\"2d\");\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size);\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize);\n\n\t\t\treturn canvas.toDataURL(\"image/png\", 0.7);\n\t\t};\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function (canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2);\n\t\t\tH2 = Math.round(H2);\n\t\t\tvar img = canvas.getContext(\"2d\").getImageData(0, 0, W, H);\n\t\t\tvar img2 = canvas.getContext(\"2d\").getImageData(0, 0, W2, H2);\n\t\t\tvar data = img.data;\n\t\t\tvar data2 = img2.data;\n\t\t\tvar ratio_w = W / W2;\n\t\t\tvar ratio_h = H / H2;\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2);\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2);\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4;\n\t\t\t\t\tvar weight = 0;\n\t\t\t\t\tvar weights = 0;\n\t\t\t\t\tvar weights_alpha = 0;\n\t\t\t\t\tvar gx_r = 0;\n\t\t\t\t\tvar gx_g = 0;\n\t\t\t\t\tvar gx_b = 0;\n\t\t\t\t\tvar gx_a = 0;\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h;\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half;\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w;\n\t\t\t\t\t\tvar w0 = dy * dy; //pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half;\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx);\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t//hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1;\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W);\n\t\t\t\t\t\t\t\t\t//alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3];\n\t\t\t\t\t\t\t\t\tweights_alpha += weight;\n\t\t\t\t\t\t\t\t\t//colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255)\n\t\t\t\t\t\t\t\t\t\tweight = weight * data[dx + 3] / 250;\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx];\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1];\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2];\n\t\t\t\t\t\t\t\t\tweights += weight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights;\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights;\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights;\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext(\"2d\").clearRect(0, 0, Math.max(W, W2), Math.max(H, H2));\n\t\t\tcanvas.width = W2;\n\t\t\tcanvas.height = H2;\n\t\t\tcanvas.getContext(\"2d\").putImageData(img2, 0, 0);\n\t\t};\n\n\t\tvar addConflict = function ($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict');\n\t\t\tvar $originalDiv = $conflict.find('.original');\n\t\t\tvar $replacementDiv = $conflict.find('.replacement');\n\n\t\t\t$conflict.data('data', data);\n\n\t\t\t$conflict.find('.filename').text(original.name);\n\t\t\t$originalDiv.find('.size').text(humanFileSize(original.size));\n\t\t\t$originalDiv.find('.mtime').text(formatDate(original.mtime));\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModifiedDate) {\n\t\t\t\t$replacementDiv.find('.size').text(humanFileSize(replacement.size));\n\t\t\t\t$replacementDiv.find('.mtime').text(formatDate(replacement.lastModifiedDate));\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name;\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t};\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec);\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, \"%27\");\n\t\t\t$originalDiv.find('.icon').css({\"background-image\": \"url('\" + previewpath + \"')\"});\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction (path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')');\n\t\t\t\t}, function () {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type);\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')');\n\t\t\t\t}\n\t\t\t);\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length;\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId);\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId);\n\n\t\t\t$conflicts.append($conflict);\n\n\t\t\t//set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold');\n\t\t\t} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold');\n\t\t\t} else {\n\t\t\t\t//TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold');\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold');\n\t\t\t} else {\n\t\t\t\t//TODO add to same size collection?\n\t\t\t}\n\n\t\t\t//TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true);\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'));\n\t\t\t}\n\t\t};\n\t\t//var selection = controller.getSelection(data.originalFiles);\n\t\t//if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t//} else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content';\n\t\tvar dialogId = '#' + dialogName;\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts');\n\t\t\taddConflict($conflicts, original, replacement);\n\n\t\t\tvar count = $(dialogId + ' .conflict').length;\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{count: count}\n\t\t\t);\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title);\n\n\t\t\t//recalculate dimensions\n\t\t\t$(window).trigger('resize');\n\t\t\tdialogDeferred.resolve();\n\t\t} else {\n\t\t\t//create dialog\n\t\t\tthis._fileexistsshown = true;\n\t\t\t$.when(this._getFileExistsTemplate()).then(function ($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict');\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t});\n\t\t\t\t$('body').append($dlg);\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts');\n\t\t\t\t\taddConflict($conflicts, original, replacement);\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function () {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function () {\n\t\t\t\t\t\tself._fileexistsshown = false;\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(dialogId).css('height', 'auto');\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue');\n\t\t\t\t$primaryButton.prop('disabled', true);\n\n\t\t\t\tfunction updatePrimaryButton () {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length;\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0);\n\t\t\t\t}\n\n\t\t\t\t//add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function () {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]');\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function () {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]');\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function () {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]');\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function () {\n\t\t\t\t\tvar $checkbox = $(this);\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'));\n\t\t\t\t});\n\n\t\t\t\t//update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function () {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length;\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'));\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', {count: count}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('');\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton();\n\t\t\t\t});\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function () {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length;\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'));\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', {count: count}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('');\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton();\n\t\t\t\t});\n\n\t\t\t\tdialogDeferred.resolve();\n\t\t\t})\n\t\t\t\t.fail(function () {\n\t\t\t\t\tdialogDeferred.reject();\n\t\t\t\t\talert(t('core', 'Error loading file exists template'));\n\t\t\t\t});\n\t\t}\n\t\t//}\n\t\treturn dialogDeferred.promise();\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function () {\n\t\tvar self = this;\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function (response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview;\n\t\t\tself.$showGridView.next('#picker-view-toggle')\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview);\n\t\t});\n\t},\n\t_onGridviewChange: function () {\n\t\tvar show = this.$showGridView.is(':checked');\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), {\n\t\t\t\tshow: show\n\t\t\t});\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show);\n\t},\n\t_getFilePickerTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function (tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl);\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach();\n\t\t\t\tdefer.resolve(self.$filePickerTemplate);\n\t\t\t})\n\t\t\t\t.fail(function (jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown);\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getMessageTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function (tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl);\n\t\t\t\tdefer.resolve(self.$messageTemplate);\n\t\t\t})\n\t\t\t\t.fail(function (jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown);\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getFileExistsTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function (tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl);\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate);\n\t\t\t})\n\t\t\t\t.fail(function () {\n\t\t\t\t\tdefer.reject();\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getFileList: function (dir, mimeType) { //this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === \"string\") {\n\t\t\tmimeType = [mimeType];\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function (dir) {\n\t\tvar self = this;\n\t\tthis.$filelist.empty();\n\t\tthis.$filePicker.find('.emptycontent').hide();\n\t\tthis.$filelistContainer.addClass('icon-loading');\n\t\tthis.$filePicker.data('path', dir);\n\t\tvar filter = this.$filePicker.data('mimetype');\n\t\tif (typeof (filter) === \"string\") {\n\t\t\tfilter = [filter];\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s');\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden');\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n');\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s');\n\t\t}\n\t\tself.filepicker.filesClient.getFolderContents(dir).then(function (status, files) {\n\t\t\tself.filelist = files;\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function (file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function (fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name);\n\t\t\t\t},\n\t\t\t\tsize: function (fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size;\n\t\t\t\t},\n\t\t\t\tmtime: function (fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime;\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name;\n\t\t\tfiles = files.sort(function (file1, file2) {\n\t\t\t\tvar isFavorite = function (fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0;\n\t\t\t\t};\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2);\n\t\t\t});\n\n\t\t\tself._fillSlug();\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show();\n\t\t\t\tself.$fileListHeader.hide();\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide();\n\t\t\t\tself.$fileListHeader.show();\n\t\t\t}\n\n\t\t\t$.each(files, function (idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype);\n\t\t\t\tvar simpleSize, sizeColor;\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = humanFileSize(parseInt(entry.size, 10), true);\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2));\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending');\n\t\t\t\t\tsizeColor = 80;\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t});\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t};\n\t\t\t\t\tvar img = new Image();\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);\n\t\t\t\t\timg.onload = function () {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')');\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\timg.src = previewUrl;\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row);\n\t\t\t});\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading');\n\t\t});\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function () {\n\t\tthis.$dirTree.empty();\n\t\tvar self = this;\n\t\tvar dir;\n\t\tvar path = this.$filePicker.data('path');\n\t\tvar $template = $('<div data-dir=\"{dir}\"><a>{name}</a></div>').addClass('crumb');\n\t\tif (path) {\n\t\t\tvar paths = path.split('/');\n\t\t\t$.each(paths, function (index, dir) {\n\t\t\t\tdir = paths.pop();\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}));\n\t\t\t});\n\t\t}\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, {escapeFunction: null}).prependTo(this.$dirTree);\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function (event, type) {\n\t\tvar self = event.data;\n\t\tvar dir = $(event.target).closest('.crumb').data('dir');\n\t\tself._fillFilePicker(dir);\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog');\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog);\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop());\n\t\tif (this.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1) {\n\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function (event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog');\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary');\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected');\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected');\n\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'));\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'));\n\t\t\tif (this.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function (type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', {folder: dir});\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', {folder: dir});\n\t\tvar buttons = $('.oc-dialog-buttonrow button');\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText);\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText);\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText);\n\t\t\t\tbuttons.eq(1).text(moveText);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * ownCloud\n *\n * @author Robin Appelman\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE\n * License as published by the Free Software Foundation; either\n * version 3 of the License, or any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU AFFERO GENERAL PUBLIC LICENSE for more details.\n *\n * You should have received a copy of the GNU Affero General Public\n * License along with this library. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Wrapper for server side events\n * (http://en.wikipedia.org/wiki/Server-sent_events)\n * includes a fallback for older browsers and IE\n *\n * use server side events with caution, too many open requests can hang the\n * server\n */\n\n/* global EventSource */\n\nimport $ from 'jquery'\n\nimport {getToken} from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function (src, data) {\n\tvar dataStr = '';\n\tvar name;\n\tvar joinChar;\n\tthis.typelessListeners = [];\n\tthis.closed = false;\n\tthis.listeners = {};\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&';\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken());\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&';\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?';\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr);\n\t\tthis.source.onmessage = function (e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data));\n\t\t\t}\n\t\t}.bind(this);\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount;\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this;\n\t\tthis.iframe = $('<iframe/>');\n\t\tthis.iframe.attr('id', iframeId);\n\t\tthis.iframe.hide();\n\n\t\tjoinChar = '&';\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?';\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr);\n\t\t$('body').append(this.iframe);\n\t\tthis.useFallBack = true;\n\t\tOCEventSource.iframeCount++;\n\t}\n\t//add close listener\n\tthis.listen('__internal__', function (data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close();\n\t\t}\n\t}.bind(this));\n};\nOCEventSource.fallBackSources = [];\nOCEventSource.iframeCount = 0;//number of fallback iframes\nOCEventSource.fallBackCallBack = function (id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data);\n};\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {},//only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function (type, data) {\n\t\tvar i;\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data);\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0,//for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function (type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = [];\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function (e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback);\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function () {\n\t\tthis.closed = true;\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close();\n\t\t}\n\t}\n};\n\nexport default OCEventSource;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Get a variable by name\n * @param {string} name\n * @return {*}\n */\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (var i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n * @param {string} name\n * @param {*} value\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split(\".\")\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst capabilities = window._oc_capabilities || {}\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0\n */\nexport const getCapabilities = () => capabilities\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Protocol that is used to access this Nextcloud instance\n * @return {string} Used protocol\n * @deprecated 17.0.0 use window.location.protocol directly\n */\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {int} port number\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport {menuSpeed} from './constants'\n\nlet currentMenu = null\nlet currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle\n * @param {jQuery} $menuEl\n * @param {function|undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @returns {undefined}\n */\nexport const registerMenu = ($toggle, $menuEl, toggle, headerMenu) => {\n\t$menuEl.addClass('menu')\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(($toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON')\n\t\t? 'click.menu'\n\t\t: 'click.menu keyup.menu', function (event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== \"Enter\") {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * @todo Write documentation\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function () {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {Object} [$toggle=null] menu toggle\n * @param {Object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {bool} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/* global t */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery';\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t */\n\tstartSaving: function (selector) {\n\t\tthis.startAction(selector, t('core', 'Saving...'));\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show();\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {Object} response Response of the server\n\t * @param {Object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving: function (selector, response) {\n\t\tthis.finishedAction(selector, response);\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {Object} response Response of the server\n\t * @param {Object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction: function (selector, response) {\n\t\tif (response.status === \"success\") {\n\t\t\tthis.finishedSuccess(selector, response.data.message);\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message);\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show();\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show();\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * @namespace OC.Plugins\n */\nexport default {\n\n\t/**\n\t * @type Array.<OC.Plugin>\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {String} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin\n\t */\n\tregister: function (targetName, plugin) {\n\t\tvar plugins = this._plugins[targetName];\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = [];\n\t\t}\n\t\tplugins.push(plugin);\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {String} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins: function (targetName) {\n\t\treturn this._plugins[targetName] || [];\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {String} targetName app name / class name\n\t * @param {Object} object to be extended\n\t * @param {Object} [options] options\n\t */\n\tattach: function (targetName, targetObject, options) {\n\t\tvar plugins = this.getPlugins(targetName);\n\t\tfor (var i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {String} targetName app name / class name\n\t * @param {Object} object to be extended\n\t * @param {Object} [options] options\n\t */\n\tdetach: function (targetName, targetObject, options) {\n\t\tvar plugins = this.getPlugins(targetName);\n\t\tfor (var i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options);\n\t\t\t}\n\t\t}\n\t}\n\n}","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport OC from './index'\n\n/**\n * Do a search query and display the results\n * @param {string} query the search query\n */\nconst search = function (query) {\n\tOC.Search.search(query, null, 0, 30);\n};\n\n/**\n * @namespace OC.search\n */\nsearch.customResults = {};\n/**\n * @deprecated use get/setFormatter() instead\n */\nsearch.resultTypes = {};\n\nexport default search;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const theme = window._theme || {}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\n\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState: function (params, url, replace) {\n\t\tvar strParams;\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params;\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params);\n\t\t}\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams;\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tvar patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]');\n\t\t\t\tfor (var i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i];\n\t\t\t\t\tpattern.style.fill = pattern.style.fill;\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke;\n\t\t\t\t\tpattern.removeAttribute(\"filter\");\n\t\t\t\t\tpattern.setAttribute(\"filter\", \"url(#invert)\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url);\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url);\n\t\t\t}\n\t\t}\n\t\t// use URL hash for IE8\n\t\telse {\n\t\t\twindow.location.hash = '?' + strParams;\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true;\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\tpushState: function (params, url) {\n\t\treturn this._pushState(params, url, false);\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState: function (params, url) {\n\t\treturn this._pushState(params, url, true);\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param handler function\n\t */\n\taddOnPopStateHandler: function (handler) {\n\t\tthis._handlers.push(handler);\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t */\n\t_parseHashQuery: function () {\n\t\tvar hash = window.location.hash,\n\t\t\tpos = hash.indexOf('?');\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1);\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1);\n\t\t}\n\t\treturn '';\n\t},\n\n\t_decodeQuery: function (query) {\n\t\treturn query.replace(/\\+/g, ' ');\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return map of parameters\n\t */\n\tparseUrlQuery: function () {\n\t\tvar query = this._parseHashQuery(),\n\t\t\tparams;\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query));\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)));\n\t\treturn params || {};\n\t},\n\n\t_onPopState: function (e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false;\n\t\t\treturn;\n\t\t}\n\t\tvar params;\n\t\tif (!this._handlers.length) {\n\t\t\treturn;\n\t\t}\n\t\tparams = (e && e.state);\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params);\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {};\n\t\t}\n\t\tfor (var i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params);\n\t\t}\n\t}\n}\n","/* global t */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport humanFileSize from '../Util/human-file-size'\n\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tlet tz = [], x = 0, y = -1, n = 0, code, c;\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x);\n\t\t// only include the dot in strings\n\t\tvar m = ((!n && c === '.') || (c >= '0' && c <= '9'));\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++;\n\t\t\ttz[y] = '';\n\t\t\tn = m;\n\t\t}\n\t\ttz[y] += c;\n\t\tx++;\n\t}\n\treturn tz;\n}\n\n/**\n * Utility functions\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t// TODO: remove original functions from global namespace\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize: function (string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar s = string.toLowerCase().trim();\n\t\tvar bytes = null;\n\n\t\tvar bytesArray = {\n\t\t\t'b': 1,\n\t\t\t'k': 1024,\n\t\t\t'kb': 1024,\n\t\t\t'mb': 1024 * 1024,\n\t\t\t'm': 1024 * 1024,\n\t\t\t'gb': 1024 * 1024 * 1024,\n\t\t\t'g': 1024 * 1024 * 1024,\n\t\t\t'tb': 1024 * 1024 * 1024 * 1024,\n\t\t\t't': 1024 * 1024 * 1024 * 1024,\n\t\t\t'pb': 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\t'p': 1024 * 1024 * 1024 * 1024 * 1024\n\t\t};\n\n\t\tvar matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i);\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s);\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]];\n\t\t}\n\n\t\tbytes = Math.round(bytes);\n\t\treturn bytes;\n\t},\n\n\t/**\n\t * @param timestamp\n\t * @param format\n\t * @returns {string} timestamp formatted as requested\n\t */\n\tformatDate: function (timestamp, format) {\n\t\tformat = format || \"LLL\";\n\t\treturn moment(timestamp).format(format);\n\t},\n\n\t/**\n\t * @param timestamp\n\t * @returns {string} human readable difference from now\n\t */\n\trelativeModifiedDate: function (timestamp) {\n\t\tvar diff = moment().diff(moment(timestamp));\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago');\n\t\t}\n\t\treturn moment(timestamp).fromNow();\n\t},\n\n\t/**\n\t * Returns whether this is IE\n\t *\n\t * @return {bool} true if this is IE, false otherwise\n\t */\n\tisIE: function () {\n\t\treturn $('html').hasClass('ie');\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {int} width of scrollbar\n\t */\n\tgetScrollBarWidth: function () {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth;\n\t\t}\n\n\t\tvar inner = document.createElement('p');\n\t\tinner.style.width = \"100%\";\n\t\tinner.style.height = \"200px\";\n\n\t\tvar outer = document.createElement('div');\n\t\touter.style.position = \"absolute\";\n\t\touter.style.top = \"0px\";\n\t\touter.style.left = \"0px\";\n\t\touter.style.visibility = \"hidden\";\n\t\touter.style.width = \"200px\";\n\t\touter.style.height = \"150px\";\n\t\touter.style.overflow = \"hidden\";\n\t\touter.appendChild(inner);\n\n\t\tdocument.body.appendChild(outer);\n\t\tvar w1 = inner.offsetWidth;\n\t\touter.style.overflow = 'scroll';\n\t\tvar w2 = inner.offsetWidth;\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth;\n\t\t}\n\n\t\tdocument.body.removeChild(outer);\n\n\t\tthis._scrollBarWidth = (w1 - w2);\n\n\t\treturn this._scrollBarWidth;\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime: function (date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t * @param a first string to compare\n\t * @param b second string to compare\n\t * @return -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare: function (a, b) {\n\t\tvar x;\n\t\tvar aa = chunkify(a);\n\t\tvar bb = chunkify(b);\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tvar aNum = Number(aa[x]), bNum = Number(bb[x]);\n\t\t\t\t// note: == is correct here\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum;\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length;\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t * @param {function} callback\n\t * @param {integer} interval in milliseconds\n\t */\n\twaitFor: function (callback, interval) {\n\t\tvar internalCallback = function () {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval);\n\t\t\t}\n\t\t};\n\n\t\tinternalCallback();\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue: function (name, value) {\n\t\tvar cookies = document.cookie.split(';');\n\t\tfor (var i = 0; i < cookies.length; i++) {\n\t\t\tvar cookie = cookies[i].split('=');\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Redirect to the target URL, can also be used for downloads.\n * @param {string} targetURL URL to redirect to\n * @deprecated 17.0.0 use window.location directly\n */\nexport const redirect = targetURL => window.location = targetURL\n\n/**\n * Reloads the current page\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => window.location.reload()\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tvar pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {addScript, addStyle} from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport {AppConfig, appConfig} from './appconfig'\nimport {appSettings} from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from './path'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport {currentUser, getCurrentUser} from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport {get, set} from './get_set'\nimport {getCapabilities} from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n\tsubscribe as subscribeToRequestTokenChange,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport {isUserAdmin} from './admin'\nimport L10N from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tfilePath,\n\tgenerateUrl,\n\tgetRootPath,\n\timagePath,\n\tlinkTo,\n\tlinkToOCS,\n\tlinkToRemote,\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport search from './search'\nimport {theme} from './theme'\nimport Util from './util'\nimport {debug} from './debug'\nimport {redirect, reload} from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t * @param {string} file to check\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type String\n\t * @deprecated use {@link OC.getCurrentUser} instead\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 17.0.0 use OC.getCapabilities() instead\n\t */\n\t_capabilities: getCapabilities(),\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\tbasename,\n\tencodePath,\n\tdirname,\n\tisSamePath,\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * L10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {String} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\tsearch,\n\ttheme,\n\tUtil,\n\tdebug,\n\tfilePath,\n\tgenerateUrl,\n\tget: get(window),\n\tset: set(window),\n\tgetRootPath,\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\tlinkTo,\n\tlinkToOCS,\n\tlinkToRemote,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type string\n\t *\n\t * @deprecated since 8.2, use OC.getRootPath() instead\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribeToRequestTokenChange(token => OC.requestToken = token)\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software = you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation either version 3 of the\n * License or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not see <http://www.gnu.org/licenses/>.\n */\n\nexport const coreApps = ['', 'admin','log','core/search','settings','core','3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\n\nimport OC from './index'\nimport {coreApps} from './constants'\n\n/**\n * Get an absolute url to a file in an app\n * @param {string} app the id of the app the file belongs to\n * @param {string} file the file path relative to the app folder\n * @return {string} Absolute URL to a file\n */\nexport const linkTo = (app, file) => filePath(app, '', file)\n\n/**\n * Creates a relative url for remote use\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => getRootPath() + '/remote.php/' + service\n\n/**\n * @brief Creates an absolute url for remote use\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemote = service => window.location.protocol + '//' + window.location.host + linkToRemoteBase(service)\n\n/**\n * Gets the base path for the given OCS API service.\n * @param {string} service name\n * @param {int} version OCS API version\n * @return {string} OCS API base path\n */\nexport const linkToOCS = (service, version) => {\n\tversion = (version !== 2) ? 1 : 2\n\treturn window.location.protocol + '//' + window.location.host + getRootPath() + '/ocs/v' + version + '.php/' + service + '/'\n}\n\n/**\n * Generates the absolute url for the given relative url, which can contain parameters.\n * Parameters will be URL encoded automatically.\n * @param {string} url\n * @param [params] params\n * @param [options] options\n * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n * @return {string} Absolute URL for the given relative URL\n */\nexport const generateUrl = (url, params, options) => {\n\tconst defaultOptions = {\n\t\t\tescape: true\n\t\t},\n\t\tallOptions = options || {};\n\t_.defaults(allOptions, defaultOptions);\n\n\tconst _build = function (text, vars) {\n\t\tvars = vars || [];\n\t\treturn text.replace(/{([^{}]*)}/g,\n\t\t\tfunction (a, b) {\n\t\t\t\tvar r = (vars[b]);\n\t\t\t\tif (allOptions.escape) {\n\t\t\t\t\treturn (typeof r === 'string' || typeof r === 'number') ? encodeURIComponent(r) : encodeURIComponent(a);\n\t\t\t\t} else {\n\t\t\t\t\treturn (typeof r === 'string' || typeof r === 'number') ? r : a;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\tif (url.charAt(0) !== '/') {\n\t\turl = '/' + url;\n\n\t}\n\n\tif (OC.config.modRewriteWorking === true) {\n\t\treturn getRootPath() + _build(url, params);\n\t}\n\n\treturn getRootPath() + '/index.php' + _build(url, params);\n}\n\n/**\n * get the absolute path to an image file\n * if no extension is given for the image, it will automatically decide\n * between .png and .svg based on what the browser supports\n *\n * @param {string} app the app id to which the image belongs\n * @param {string} file the name of the image file\n * @return {string}\n */\nexport const imagePath = (app, file) => {\n\tif (file.indexOf('.') === -1) {\n\t\t//if no extension is given, use svg\n\t\treturn filePath(app, 'img', file + '.svg')\n\t}\n\n\treturn filePath(app, 'img', file)\n}\n\n/**\n * Get the absolute url for a file in an app\n * @param {string} app the id of the app\n * @param {string} type the type of the file to link to (e.g. css,img,ajax.template)\n * @param {string} file the filename\n * @return {string} Absolute URL for a file in an app\n */\nexport const filePath = (app, type, file) => {\n\tconst isCore = coreApps.indexOf(app) !== -1\n\tlet link = getRootPath()\n\tif (file.substring(file.length - 3) === 'php' && !isCore) {\n\t\tlink += '/index.php/apps/' + app;\n\t\tif (file !== 'index.php') {\n\t\t\tlink += '/'\n\t\t\tif (type) {\n\t\t\t\tlink += encodeURI(type + '/')\n\t\t\t}\n\t\t\tlink += file\n\t\t}\n\t} else if (file.substring(file.length - 3) !== 'php' && !isCore) {\n\t\tlink = OC.appswebroots[app];\n\t\tif (type) {\n\t\t\tlink += '/' + type + '/'\n\t\t}\n\t\tif (link.substring(link.length - 1) !== '/') {\n\t\t\tlink += '/'\n\t\t}\n\t\tlink += file\n\t} else {\n\t\tif ((app === 'settings' || app === 'core' || app === 'search') && type === 'ajax') {\n\t\t\tlink += '/index.php/'\n\t\t} else {\n\t\t\tlink += '/'\n\t\t}\n\t\tif (!isCore) {\n\t\t\tlink += 'apps/'\n\t\t}\n\t\tif (app !== '') {\n\t\t\tapp += '/'\n\t\t\tlink += app\n\t\t}\n\t\tif (type) {\n\t\t\tlink += type + '/'\n\t\t}\n\t\tlink += file\n\t}\n\treturn link\n}\n\n/**\n * Returns the web root path where this Nextcloud instance\n * is accessible, with a leading slash.\n * For example \"/nextcloud\".\n *\n * @return {string} web root path\n *\n * @since 8.2\n */\nexport const getRootPath = () => OC.webroot\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQ3ZCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRTdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFtQjtBQUMzQyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUlNLFVBQVUsR0FKaEIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUJBQW1CLENBQUM7R0FDcEYsQ0FBQztDQUNIO1FBQ08sVUFBVSxHQUFWLFVBQVU7Ozs7O0FBSVgsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFTLEtBQUssRUFBRTtBQUN0RCxTQUFPLEFBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUFHLEtBQUssQ0FBQztDQUNqRyxDQUFDOzs7OztBQUdLLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUdNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUFFLFdBQU8sTUFBTSxDQUFDO0dBQUU7QUFDOUMsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19\n","// Backbone.js 1.4.0\n\n// (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n create: 'POST',\n update: 'PUT',\n patch: 'PATCH',\n delete: 'DELETE',\n read: 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {String} appId\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {String} appId\n * @return {Boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {String} appId\n * @return {Object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {String} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload: function(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tvar deferred = $.Deferred();\n\t\t\tvar promise = deferred.promise();\n\t\t\tpromise.then(callback);\n\t\t\tdeferred.resolve();\n\t\t\treturn promise;\n\t\t}\n\n\t\tvar self = this;\n\t\tvar url = OC.filePath(appName, 'l10n', OC.getLocale() + '.json');\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback);\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {String} appName name of the app\n\t * @param {Object<String,String>} bundle\n\t */\n\tregister: function(appName, bundle, pluralForm) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private do not use this\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate: function(app, text, vars, count, options) {\n\t\tvar defaultOptions = {\n\t\t\t\tescape: true\n\t\t\t},\n\t\t\tallOptions = options || {};\n\t\t_.defaults(allOptions, defaultOptions);\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tvar _build = function (text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction (a, b) {\n\t\t\t\t\tvar r = vars[b];\n\t\t\t\t\tif(typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\tif(allOptions.escape) {\n\t\t\t\t\t\t\treturn DOMPurify.sanitize(escapeHTML(r));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn DOMPurify.sanitize(r);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn DOMPurify.sanitize(a);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\t\tvar translation = text;\n\t\tvar bundle = getAppTranslations(app);\n\t\tvar value = bundle.translations[text];\n\t\tif( typeof(value) !== 'undefined' ){\n\t\t\ttranslation = value;\n\t\t}\n\n\t\tif(typeof vars === 'object' || count !== undefined ) {\n\t\t\treturn DOMPurify.sanitize(_build(translation, vars, count));\n\t\t} else {\n\t\t\treturn DOMPurify.sanitize(translation);\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param [vars] map of placeholder key to value\n\t * @param {array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural: function(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_';\n\t\tconst bundle = getAppTranslations(app);\n\t\tconst value = bundle.translations[identifier];\n\t\tif( typeof(value) !== 'undefined' ){\n\t\t\tvar translation = value;\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tvar plural = bundle.pluralFunction(count);\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options);\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options);\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options);\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @private\n\t */\n\t_getPlural: function(number) {\n\t\tvar language = OC.getLanguage();\n\t\tif ('pt_BR' === language) {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr';\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (1 == number) ? 0 : 1;\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('_'));\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\t\tcase 'az':\n\t\t\tcase 'bo':\n\t\t\tcase 'dz':\n\t\t\tcase 'id':\n\t\t\tcase 'ja':\n\t\t\tcase 'jv':\n\t\t\tcase 'ka':\n\t\t\tcase 'km':\n\t\t\tcase 'kn':\n\t\t\tcase 'ko':\n\t\t\tcase 'ms':\n\t\t\tcase 'th':\n\t\t\tcase 'tr':\n\t\t\tcase 'vi':\n\t\t\tcase 'zh':\n\t\t\t\treturn 0;\n\n\t\t\tcase 'af':\n\t\t\tcase 'bn':\n\t\t\tcase 'bg':\n\t\t\tcase 'ca':\n\t\t\tcase 'da':\n\t\t\tcase 'de':\n\t\t\tcase 'el':\n\t\t\tcase 'en':\n\t\t\tcase 'eo':\n\t\t\tcase 'es':\n\t\t\tcase 'et':\n\t\t\tcase 'eu':\n\t\t\tcase 'fa':\n\t\t\tcase 'fi':\n\t\t\tcase 'fo':\n\t\t\tcase 'fur':\n\t\t\tcase 'fy':\n\t\t\tcase 'gl':\n\t\t\tcase 'gu':\n\t\t\tcase 'ha':\n\t\t\tcase 'he':\n\t\t\tcase 'hu':\n\t\t\tcase 'is':\n\t\t\tcase 'it':\n\t\t\tcase 'ku':\n\t\t\tcase 'lb':\n\t\t\tcase 'ml':\n\t\t\tcase 'mn':\n\t\t\tcase 'mr':\n\t\t\tcase 'nah':\n\t\t\tcase 'nb':\n\t\t\tcase 'ne':\n\t\t\tcase 'nl':\n\t\t\tcase 'nn':\n\t\t\tcase 'no':\n\t\t\tcase 'oc':\n\t\t\tcase 'om':\n\t\t\tcase 'or':\n\t\t\tcase 'pa':\n\t\t\tcase 'pap':\n\t\t\tcase 'ps':\n\t\t\tcase 'pt':\n\t\t\tcase 'so':\n\t\t\tcase 'sq':\n\t\t\tcase 'sv':\n\t\t\tcase 'sw':\n\t\t\tcase 'ta':\n\t\t\tcase 'te':\n\t\t\tcase 'tk':\n\t\t\tcase 'ur':\n\t\t\tcase 'zu':\n\t\t\t\treturn (1 == number) ? 0 : 1;\n\n\t\t\tcase 'am':\n\t\t\tcase 'bh':\n\t\t\tcase 'fil':\n\t\t\tcase 'fr':\n\t\t\tcase 'gun':\n\t\t\tcase 'hi':\n\t\t\tcase 'hy':\n\t\t\tcase 'ln':\n\t\t\tcase 'mg':\n\t\t\tcase 'nso':\n\t\t\tcase 'xbr':\n\t\t\tcase 'ti':\n\t\t\tcase 'wa':\n\t\t\t\treturn ((0 == number) || (1 == number)) ? 0 : 1;\n\n\t\t\tcase 'be':\n\t\t\tcase 'bs':\n\t\t\tcase 'hr':\n\t\t\tcase 'ru':\n\t\t\tcase 'sh':\n\t\t\tcase 'sr':\n\t\t\tcase 'uk':\n\t\t\t\treturn ((1 == number % 10) && (11 != number % 100)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n\t\t\tcase 'cs':\n\t\t\tcase 'sk':\n\t\t\t\treturn (1 == number) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2);\n\n\t\t\tcase 'ga':\n\t\t\t\treturn (1 == number) ? 0 : ((2 == number) ? 1 : 2);\n\n\t\t\tcase 'lt':\n\t\t\t\treturn ((1 == number % 10) && (11 != number % 100)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n\t\t\tcase 'sl':\n\t\t\t\treturn (1 == number % 100) ? 0 : ((2 == number % 100) ? 1 : (((3 == number % 100) || (4 == number % 100)) ? 2 : 3));\n\n\t\t\tcase 'mk':\n\t\t\t\treturn (1 == number % 10) ? 0 : 1;\n\n\t\t\tcase 'mt':\n\t\t\t\treturn (1 == number) ? 0 : (((0 == number) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3));\n\n\t\t\tcase 'lv':\n\t\t\t\treturn (0 == number) ? 0 : (((1 == number % 10) && (11 != number % 100)) ? 1 : 2);\n\n\t\t\tcase 'pl':\n\t\t\t\treturn (1 == number) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2);\n\n\t\t\tcase 'cy':\n\t\t\t\treturn (1 == number) ? 0 : ((2 == number) ? 1 : (((8 == number) || (11 == number)) ? 2 : 3));\n\n\t\t\tcase 'ro':\n\t\t\t\treturn (1 == number) ? 0 : (((0 == number) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2);\n\n\t\t\tcase 'ar':\n\t\t\t\treturn (0 == number) ? 0 : ((1 == number) ? 1 : ((2 == number) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))));\n\n\t\t\tdefault:\n\t\t\t\treturn 0;\n\t\t}\n\t}\n};\n\nexport default L10n;\n\n/**\n * Returns the user's locale as a BCP 47 compliant language tag\n *\n * @return {String} locale string\n */\nexport const getCanonicalLocale = () => {\n\tconst locale = getLocale()\n\treturn typeof locale === 'string' ? locale.replace(/_/g, '-') : locale\n}\n\n/**\n * Returns the user's locale\n *\n * @return {String} locale string\n */\nexport const getLocale = () => $('html').data('locale')\n\n/**\n * Returns the user's language\n *\n * @returns {String} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text);\n});\n\n","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nlet token = document.getElementsByTagName('head')[0].getAttribute('data-requesttoken');\nconst observers = []\n\n/**\n * @return {string}\n */\nexport const getToken = () => token\n\n/**\n * @param {Function} observer\n * @return {number}\n */\nexport const subscribe = observer => observers.push(observer)\n\n/**\n * @param {String} newToken\n */\nexport const setToken = newToken => {\n\ttoken = newToken\n\n\tobservers.forEach(o => o(token))\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method\n * @param {string} endpoint\n * @param {Object} [options]\n * @param {Object} [options.data]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @internal\n */\nfunction call (method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options));\n\t\treturn;\n\t}\n\n\toptions = options || {};\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: OC.linkToOCS('apps/provisioning_api/api/v1', 2) + 'config/apps' + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error\n\t});\n}\n\n/**\n * @param {Object} [options]\n * @param {function} [options.success]\n * @since 11.0.0\n */\nexport function getApps (options) {\n\tcall('get', '', options);\n}\n\n/**\n * @param {string} app\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function getKeys (app, options) {\n\tcall('get', '/' + app, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {string|function} defaultValue\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function getValue (app, key, defaultValue, options) {\n\toptions = options || {};\n\toptions.data = {\n\t\tdefaultValue: defaultValue\n\t};\n\n\tcall('get', '/' + app + '/' + key, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {string} value\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function setValue (app, key, value, options) {\n\toptions = options || {};\n\toptions.data = {\n\t\tvalue: value\n\t};\n\n\tcall('post', '/' + app + '/' + key, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function deleteKey (app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options);\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.DOMPurify = factory());\n}(this, (function () { 'use strict';\n\nvar freeze$1 = Object.freeze || function (x) {\n return x;\n};\n\nvar html = freeze$1(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n// SVG\nvar svg = freeze$1(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern']);\n\nvar svgFilters = freeze$1(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\nvar mathMl = freeze$1(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\nvar text = freeze$1(['#text']);\n\nvar freeze$2 = Object.freeze || function (x) {\n return x;\n};\n\nvar html$1 = freeze$2(['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns']);\n\nvar svg$1 = freeze$2(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n\nvar mathMl$1 = freeze$2(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n\nvar xml = freeze$2(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\nvar hasOwnProperty = Object.hasOwnProperty;\nvar setPrototypeOf = Object.setPrototypeOf;\n\nvar _ref$1 = typeof Reflect !== 'undefined' && Reflect;\nvar apply$1 = _ref$1.apply;\n\nif (!apply$1) {\n apply$1 = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\n/* Add properties to a lookup table */\nfunction addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = element.toLowerCase();\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!Object.isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nfunction clone(object) {\n var newObject = {};\n\n var property = void 0;\n for (property in object) {\n if (apply$1(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\nvar seal = Object.seal || function (x) {\n return x;\n};\n\nvar MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nvar ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nvar DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nvar ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nvar IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nvar IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nvar ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g // eslint-disable-line no-control-regex\n);\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar _ref = typeof Reflect !== 'undefined' && Reflect;\nvar apply = _ref.apply;\n\nvar arraySlice = Array.prototype.slice;\nvar freeze = Object.freeze;\n\nvar getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nvar _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html$$1) {\n return html$$1;\n }\n });\n } catch (error) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\n\nfunction createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.0.1';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n var useDOMParser = false;\n var removeSVGAttr = false;\n var removeTitle = false;\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser,\n TrustedTypes = window.TrustedTypes;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(TrustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n getElementsByTagName = _document.getElementsByTagName,\n createDocumentFragment = _document.createDocumentFragment;\n var importNode = originalDocument.importNode;\n\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for jQuery's $() factory? */\n var SAFE_FOR_JQUERY = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify. */\n var RETURN_DOM_IMPORT = false;\n\n /* Try to return a Trusted Type object instead of a string, retrun a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = addToSet({}, ['audio', 'head', 'math', 'script', 'style', 'template', 'svg', 'video']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet({}, cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n DOMPurify.removed.push({ element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (error) {\n node.outerHTML = emptyHTML;\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n DOMPurify.removed.push({\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (error) {\n DOMPurify.removed.push({\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name);\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = dirty.match(/^[\\s]+/);\n leadingWhitespace = matches && matches[0];\n if (leadingWhitespace) {\n dirty = dirty.slice(leadingWhitespace.length);\n }\n }\n\n /* Use DOMParser to workaround Firefox bug (see comment below) */\n if (useDOMParser) {\n try {\n doc = new DOMParser().parseFromString(dirty, 'text/html');\n } catch (error) {}\n }\n\n /* Remove title to fix a mXSS bug in older MS Edge */\n if (removeTitle) {\n addToSet(FORBID_TAGS, ['title']);\n }\n\n /* Otherwise use createHTMLDocument, because DOMParser is unsafe in\n Safari (see comment below) */\n if (!doc || !doc.documentElement) {\n doc = implementation.createHTMLDocument('');\n var _doc = doc,\n body = _doc.body;\n\n body.parentNode.removeChild(body.parentNode.firstElementChild);\n body.outerHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n if (leadingWhitespace) {\n doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n };\n\n // Firefox uses a different parser for innerHTML rather than\n // DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)\n // which means that you *must* use DOMParser, otherwise the output may\n // not be safe if used in a document.write context later.\n //\n // So we feature detect the Firefox bug and use the DOMParser if necessary.\n //\n // MS Edge, in older versions, is affected by an mXSS behavior. The second\n // check tests for the behavior and fixes it if necessary.\n if (DOMPurify.isSupported) {\n (function () {\n try {\n var doc = _initDocument('<svg><p><textarea><img src=\"</textarea><img src=x onerror=1//\">');\n if (doc.querySelector('svg img')) {\n useDOMParser = true;\n }\n } catch (error) {}\n })();\n\n (function () {\n try {\n var doc = _initDocument('<svg></p></svg>');\n if (doc.querySelector('svg p')) {\n removeSVGAttr = true;\n }\n } catch (error) {}\n })();\n\n (function () {\n try {\n var doc = _initDocument('<x/><title></title><img>');\n if (doc.querySelector('title').innerHTML.match(/<\\/title/)) {\n removeTitle = true;\n }\n } catch (error) {}\n })();\n }\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {\n return NodeFilter.FILTER_ACCEPT;\n }, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function') {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(obj) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n hooks[entryPoint].forEach(function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n // eslint-disable-next-line complexity\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = currentNode.nodeName.toLowerCase();\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for black-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') {\n try {\n var htmlToInsert = currentNode.innerHTML;\n currentNode.insertAdjacentHTML('AfterEnd', trustedTypesPolicy ? trustedTypesPolicy.createHTML(htmlToInsert) : htmlToInsert);\n } catch (error) {}\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove in case a noscript/noembed XSS is suspected */\n if (tagName === 'noscript' && currentNode.innerHTML.match(/<\\/noscript/i)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if (tagName === 'noembed' && currentNode.innerHTML.match(/<\\/noembed/i)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Convert markup to cover jQuery behavior */\n if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n if (currentNode.innerHTML) {\n currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '<');\n } else {\n currentNode.innerHTML = currentNode.textContent.replace(/</g, '<');\n }\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = content.replace(MUSTACHE_EXPR$$1, ' ');\n content = content.replace(ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Check for binary attributes */\n // eslint-disable-next-line no-negated-condition\n } else if (!value) {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n } else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var idAttr = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = attr.value.trim();\n lcName = name.toLowerCase();\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Check for possible Chrome mXSS */\n if (removeSVGAttr && value.match(/<\\//)) {\n _forceRemove(currentNode);\n }\n\n /* Remove attribute */\n // Safari (iOS + Mac), last tested v8.0.5, crashes if you try to\n // remove a \"name\" attribute from an <img> tag that has an \"id\"\n // attribute at the time.\n if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) {\n idAttr = attributes.id;\n attributes = apply(arraySlice, attributes, []);\n _removeAttribute('id', currentNode);\n _removeAttribute(name, currentNode);\n if (attributes.indexOf(idAttr) > l) {\n currentNode.setAttribute('id', idAttr.value);\n }\n } else if (\n // This works around a bug in Safari, where input[type=file]\n // cannot be dynamically set after type has been removed\n currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && hookEvent.keepAttr && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {\n continue;\n } else {\n // This avoids a crash in Safari v9.0 with double-ids.\n // The trick is to first set the id to be empty and then to\n // remove the attribute\n if (name === 'id') {\n currentNode.setAttribute(name, '');\n }\n\n _removeAttribute(name, currentNode);\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = value.replace(MUSTACHE_EXPR$$1, ' ');\n value = value.replace(ERB_EXPR$$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n DOMPurify.removed.pop();\n } catch (error) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw new TypeError('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw new TypeError('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n if (IN_PLACE) {\n /* No special handling necessary for in-place sanitization */\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!-->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && RETURN_TRUSTED_TYPE && dirty.indexOf('<') === -1) {\n return trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /* AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs. */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = serializedHTML.replace(MUSTACHE_EXPR$$1, ' ');\n serializedHTML = serializedHTML.replace(ERB_EXPR$$1, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n var lcTag = tag.toLowerCase();\n var lcName = attr.toLowerCase();\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n hooks[entryPoint].push(hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint].pop();\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nvar purify = createDOMPurify();\n\nreturn purify;\n\n})));\n//# sourceMappingURL=purify.js.map\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Namespace for apps\n * @namespace OCA\n */\nexport default {};\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","'use strict';\n\nexports.__esModule = true;\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n column = undefined;\n if (loc) {\n line = loc.start.line;\n column = loc.start.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n } else {\n this.column = column;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSTtBQUNGLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7QUFJdkIsVUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQ3pCLGNBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNwQyxlQUFLLEVBQUUsTUFBTTtBQUNiLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7T0FDdEI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVtYmVyJywgJ3N0YWNrJ107XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgICAgbGluZSxcbiAgICAgIGNvbHVtbjtcbiAgaWYgKGxvYykge1xuICAgIGxpbmUgPSBsb2Muc3RhcnQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcblxuICAgICAgLy8gV29yayBhcm91bmQgaXNzdWUgdW5kZXIgc2FmYXJpIHdoZXJlIHdlIGNhbid0IGRpcmVjdGx5IHNldCB0aGUgY29sdW1uIHZhbHVlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKG5vcCkge1xuICAgIC8qIElnbm9yZSBpZiB0aGUgYnJvd3NlciBpcyB2ZXJ5IHBhcnRpY3VsYXIgKi9cbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV4Y2VwdGlvbjtcbiJdfQ==\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Parses a URL query string into a JS map\n * @param {string} queryString query string in the format param1=1234¶m2=abcde¶m3=xyz\n * @return {Object.<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet parts,\n\t\tpos,\n\t\tcomponents,\n\t\tresult = {},\n\t\tkey,\n\t\tvalue\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tparts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tvar part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1)\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n * @param {Object.<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function (value, key) {\n\t\tvar s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * ownCloud - core\n *\n * This file is licensed under the Affero General Public License version 3 or\n * later. See the COPYING file.\n *\n * @author Bernhard Posselt <dev@bernhard-posselt.com>\n * @copyright Bernhard Posselt 2014\n */\n\nimport $ from 'jquery';\n\nvar dynamicSlideToggleEnabled = false;\n\nconst Apps = {\n\tenableDynamicSlideToggle: function () {\n\t\tdynamicSlideToggleEnabled = true;\n\t}\n};\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function ($el) {\n\tvar $appSidebar = $el || $('#app-sidebar');\n\t$appSidebar.removeClass('disappear').show();\n\t$('#app-content').trigger(new $.Event('appresized'));\n};\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function ($el) {\n\tvar $appSidebar = $el || $('#app-sidebar');\n\t$appSidebar.hide().addClass('disappear');\n\t$('#app-content').trigger(new $.Event('appresized'));\n};\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tvar buttons = $('[data-apps-slide-toggle]');\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings');\n\t}\n\n\t$(document).click(function (event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]');\n\t\t}\n\n\t\tbuttons.each(function (index, button) {\n\n\t\t\tvar areaSelector = $(button).data('apps-slide-toggle');\n\t\t\tvar area = $(areaSelector);\n\n\t\t\tfunction hideArea () {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function () {\n\t\t\t\t\tarea.trigger(new $.Event('hide'));\n\t\t\t\t});\n\t\t\t\tarea.removeClass('opened');\n\t\t\t\t$(button).removeClass('opened');\n\t\t\t}\n\n\t\t\tfunction showArea () {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function () {\n\t\t\t\t\tarea.trigger(new $.Event('show'));\n\t\t\t\t});\n\t\t\t\tarea.addClass('opened');\n\t\t\t\t$(button).addClass('opened');\n\t\t\t\tvar input = $(areaSelector + ' [autofocus]');\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea();\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tvar closest = $(event.target).closest(areaSelector);\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t});\n};\n\nexport default Apps;\n","/*\n * vim: expandtab shiftwidth=4 softtabstop=4\n */\n\n/* global dav */\nif (typeof dav == 'undefined') { dav = {}; };\n\ndav._XML_CHAR_MAP = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": '''\n};\n\ndav._escapeXml = function(s) {\n return s.replace(/[<>&\"']/g, function (ch) {\n return dav._XML_CHAR_MAP[ch];\n });\n};\n\ndav.Client = function(options) {\n var i;\n for(i in options) {\n this[i] = options[i];\n }\n\n};\n\ndav.Client.prototype = {\n\n baseUrl : null,\n\n userName : null,\n\n password : null,\n\n\n xmlNamespaces : {\n 'DAV:' : 'd'\n },\n\n /**\n * Generates a propFind request.\n *\n * @param {string} url Url to do the propfind request on\n * @param {Array} properties List of properties to retrieve.\n * @param {string} depth \"0\", \"1\" or \"infinity\"\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propFind : function(url, properties, depth, headers) {\n\n if(typeof depth === \"undefined\") {\n depth = '0';\n }\n\n // depth header must be a string, in case a number was passed in\n depth = '' + depth;\n\n headers = headers || {};\n\n headers['Depth'] = depth;\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propfind ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(properties[ii]);\n if (this.xmlNamespaces[property.namespace]) {\n body+=' <' + this.xmlNamespaces[property.namespace] + ':' + property.name + ' />\\n';\n } else {\n body+=' <x:' + property.name + ' xmlns:x=\"' + property.namespace + '\" />\\n';\n }\n\n }\n body+=' </d:prop>\\n';\n body+='</d:propfind>';\n\n return this.request('PROPFIND', url, headers, body).then(\n function(result) {\n\n if (depth === '0') {\n return {\n status: result.status,\n body: result.body[0],\n xhr: result.xhr\n };\n } else {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }\n\n }.bind(this)\n );\n\n },\n\n /**\n * Renders a \"d:set\" block for the given properties.\n *\n * @param {Object.<String,String>} properties\n * @return {String} XML \"<d:set>\" block\n */\n _renderPropSet: function(properties) {\n var body = ' <d:set>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(ii);\n var propName;\n var propValue = properties[ii];\n if (this.xmlNamespaces[property.namespace]) {\n propName = this.xmlNamespaces[property.namespace] + ':' + property.name;\n } else {\n propName = 'x:' + property.name + ' xmlns:x=\"' + property.namespace + '\"';\n }\n\n // FIXME: hard-coded for now until we allow properties to\n // specify whether to be escaped or not\n if (propName !== 'd:resourcetype') {\n propValue = dav._escapeXml(propValue);\n }\n body += ' <' + propName + '>' + propValue + '</' + propName + '>\\n';\n }\n body +=' </d:prop>\\n';\n body +=' </d:set>\\n';\n return body;\n },\n\n /**\n * Generates a propPatch request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} properties List of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propPatch : function(url, properties, headers) {\n headers = headers || {};\n\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propertyupdate ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body += '</d:propertyupdate>';\n\n return this.request('PROPPATCH', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Generates a MKCOL request.\n * If attributes are given, it will use an extended MKCOL request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} [properties] list of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n mkcol : function(url, properties, headers) {\n var body = '';\n headers = headers || {};\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n if (properties) {\n body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:mkcol';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body +='</d:mkcol>';\n }\n\n return this.request('MKCOL', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Performs a HTTP request, and returns a Promise\n *\n * @param {string} method HTTP method\n * @param {string} url Relative or absolute url\n * @param {Object} headers HTTP headers as an object.\n * @param {string} body HTTP request body.\n * @return {Promise}\n */\n request : function(method, url, headers, body) {\n\n var self = this;\n var xhr = this.xhrProvider();\n headers = headers || {};\n \n if (this.userName) {\n headers['Authorization'] = 'Basic ' + btoa(this.userName + ':' + this.password);\n // xhr.open(method, this.resolveUrl(url), true, this.userName, this.password);\n }\n xhr.open(method, this.resolveUrl(url), true);\n var ii;\n for(ii in headers) {\n xhr.setRequestHeader(ii, headers[ii]);\n }\n\n // Work around for edge\n if (body === undefined) {\n xhr.send();\n } else {\n xhr.send(body);\n }\n\n return new Promise(function(fulfill, reject) {\n\n xhr.onreadystatechange = function() {\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n var resultBody = xhr.response;\n if (xhr.status === 207) {\n resultBody = self.parseMultiStatus(xhr.response);\n }\n\n fulfill({\n body: resultBody,\n status: xhr.status,\n xhr: xhr\n });\n\n };\n\n xhr.ontimeout = function() {\n\n reject(new Error('Timeout exceeded'));\n\n };\n\n });\n\n },\n\n /**\n * Returns an XMLHttpRequest object.\n *\n * This is in its own method, so it can be easily overridden.\n *\n * @return {XMLHttpRequest}\n */\n xhrProvider : function() {\n\n return new XMLHttpRequest();\n\n },\n\n /**\n * Parses a property node.\n *\n * Either returns a string if the node only contains text, or returns an\n * array of non-text subnodes.\n *\n * @param {Object} propNode node to parse\n * @return {string|Array} text content as string or array of subnodes, excluding text nodes\n */\n _parsePropNode: function(propNode) {\n var content = null;\n if (propNode.childNodes && propNode.childNodes.length > 0) {\n var subNodes = [];\n // filter out text nodes\n for (var j = 0; j < propNode.childNodes.length; j++) {\n var node = propNode.childNodes[j];\n if (node.nodeType === 1) {\n subNodes.push(node);\n }\n }\n if (subNodes.length) {\n content = subNodes;\n }\n }\n\n return content || propNode.textContent || propNode.text || '';\n },\n\n /**\n * Parses a multi-status response body.\n *\n * @param {string} xmlBody\n * @param {Array}\n */\n parseMultiStatus : function(xmlBody) {\n\n var parser = new DOMParser();\n var doc = parser.parseFromString(xmlBody, \"application/xml\");\n\n var resolver = function(foo) {\n var ii;\n for(ii in this.xmlNamespaces) {\n if (this.xmlNamespaces[ii] === foo) {\n return ii;\n }\n }\n }.bind(this);\n\n var responseIterator = doc.evaluate('/d:multistatus/d:response', doc, resolver, XPathResult.ANY_TYPE, null);\n\n var result = [];\n var responseNode = responseIterator.iterateNext();\n\n while(responseNode) {\n\n var response = {\n href : null,\n propStat : []\n };\n\n response.href = doc.evaluate('string(d:href)', responseNode, resolver, XPathResult.ANY_TYPE, null).stringValue;\n\n var propStatIterator = doc.evaluate('d:propstat', responseNode, resolver, XPathResult.ANY_TYPE, null);\n var propStatNode = propStatIterator.iterateNext();\n\n while(propStatNode) {\n var propStat = {\n status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n properties : {},\n };\n\n var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null);\n\n var propNode = propIterator.iterateNext();\n while(propNode) {\n var content = this._parsePropNode(propNode);\n propStat.properties['{' + propNode.namespaceURI + '}' + propNode.localName] = content;\n propNode = propIterator.iterateNext();\n\n }\n response.propStat.push(propStat);\n propStatNode = propStatIterator.iterateNext();\n\n\n }\n\n result.push(response);\n responseNode = responseIterator.iterateNext();\n\n }\n\n return result;\n\n },\n\n /**\n * Takes a relative url, and maps it to an absolute url, using the baseUrl\n *\n * @param {string} url\n * @return {string}\n */\n resolveUrl : function(url) {\n\n // Note: this is rudamentary.. not sure yet if it handles every case.\n if (/^https?:\\/\\//i.test(url)) {\n // absolute\n return url;\n }\n\n var baseParts = this.parseUrl(this.baseUrl);\n if (url.charAt('/')) {\n // Url starts with a slash\n return baseParts.root + url;\n }\n\n // Url does not start with a slash, we need grab the base url right up until the last slash.\n var newUrl = baseParts.root + '/';\n if (baseParts.path.lastIndexOf('/')!==-1) {\n newUrl = newUrl = baseParts.path.subString(0, baseParts.path.lastIndexOf('/')) + '/';\n }\n newUrl+=url;\n return url;\n\n },\n\n /**\n * Parses a url and returns its individual components.\n *\n * @param {String} url\n * @return {Object}\n */\n parseUrl : function(url) {\n\n var parts = url.match(/^(?:([A-Za-z]+):)?(\\/{0,3})([0-9.\\-A-Za-z]+)(?::(\\d+))?(?:\\/([^?#]*))?(?:\\?([^#]*))?(?:#(.*))?$/);\n var result = {\n url : parts[0],\n scheme : parts[1],\n host : parts[3],\n port : parts[4],\n path : parts[5],\n query : parts[6],\n fragment : parts[7],\n };\n result.root =\n result.scheme + '://' +\n result.host +\n (result.port ? ':' + result.port : '');\n\n return result;\n\n },\n\n parseClarkNotation : function(propertyName) {\n\n var result = propertyName.match(/^{([^}]+)}(.*)$/);\n if (!result) {\n return;\n }\n\n return {\n name : result[2],\n namespace : result[1]\n };\n\n }\n\n};\n\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = dav;","/* global nc_pageLoad */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit: function () {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this));\n\t\tthis.pageLoadTime = moment.now();\n\t},\n\n\trequiresPasswordConfirmation: function () {\n\t\tvar serverTimeDiff = this.pageLoadTime - (nc_pageLoad * 1000);\n\t\tvar timeSinceLogin = moment.now() - (serverTimeDiff + (nc_lastLogin * 1000));\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000);\n\t},\n\n\t/**\n\t * @param {function} callback\n\t */\n\trequirePasswordConfirmation: function (callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {};\n\t\tvar defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t};\n\n\t\tvar config = _.extend(defaults, options);\n\n\t\tvar self = this;\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction (result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config);\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function () {\n\t\t\t\tvar $dialog = $('.oc-dialog:visible');\n\t\t\t\t$dialog.find('.ui-icon').remove();\n\t\t\t\t$dialog.addClass('password-confirmation');\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tvar $error = $('<p></p>').addClass('msg warning').text(config.error);\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-content').append($error);\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside');\n\n\t\t\t\tvar $buttons = $dialog.find('button');\n\t\t\t\t$buttons.eq(0).hide();\n\t\t\t\t$buttons.eq(1).text(config.confirm);\n\t\t\t});\n\t\t}\n\n\t\tthis.callback = callback;\n\t},\n\n\t_confirmPassword: function (password, config) {\n\t\tvar self = this;\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword: password\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess: function (response) {\n\t\t\t\tnc_lastLogin = response.lastLogin;\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback();\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again');\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config);\n\t\t\t}\n\t\t});\n\t}\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Returns a human readable file size\n * @param {number} size Size in bytes\n * @param {boolean} skipSmallSizes return '< 1 kB' for small files\n * @return {string}\n */\nexport default function humanFileSize (size, skipSmallSizes) {\n\tvar humanList = ['B', 'KB', 'MB', 'GB', 'TB'];\n\t// Calculate Log with base 1024: size = 1024 ** order\n\tvar order = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0;\n\t// Stay in range of the byte sizes that are defined\n\torder = Math.min(humanList.length - 1, order);\n\tvar readableFormat = humanList[order];\n\tvar relativeSize = (size / Math.pow(1024, order)).toFixed(1);\n\tif (skipSmallSizes === true && order === 0) {\n\t\tif (relativeSize !== \"0.0\") {\n\t\t\treturn '< 1 KB';\n\t\t} else {\n\t\t\treturn '0 KB';\n\t\t}\n\t}\n\tif (order < 2) {\n\t\trelativeSize = parseFloat(relativeSize).toFixed(0);\n\t} else if (relativeSize.substr(relativeSize.length - 2, 2) === '.0') {\n\t\trelativeSize = relativeSize.substr(0, relativeSize.length - 2);\n\t} else {\n\t\trelativeSize = parseFloat(relativeSize).toLocaleString(OC.getCanonicalLocale());\n\t}\n\treturn relativeSize + ' ' + readableFormat;\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar VERSION = '4.2.1';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 7;\n\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4yLjEnO1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAnXG59O1xuXG5jb25zdCBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBsb2dnZXIsXG4gIGxvZzogbG9nZ2VyLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oYEF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIiR7bmFtZX1cIiBhcyB1bmRlZmluZWRgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBsb2cgPSBsb2dnZXIubG9nO1xuXG5leHBvcnQge2NyZWF0ZUZyYW1lLCBsb2dnZXJ9O1xuIl19\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var af = moment.defineLocale('af', {\n months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM : function (input) {\n return /^nm$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Vandag om] LT',\n nextDay : '[Môre om] LT',\n nextWeek : 'dddd [om] LT',\n lastDay : '[Gister om] LT',\n lastWeek : '[Laas] dddd [om] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'oor %s',\n past : '%s gelede',\n s : '\\'n paar sekondes',\n ss : '%d sekondes',\n m : '\\'n minuut',\n mm : '%d minute',\n h : '\\'n uur',\n hh : '%d ure',\n d : '\\'n dag',\n dd : '%d dae',\n M : '\\'n maand',\n MM : '%d maande',\n y : '\\'n jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week : {\n dow : 1, // Maandag is die eerste dag van die week.\n doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n }\n });\n\n return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر'\n ];\n\n var ar = moment.defineLocale('ar', {\n months : months,\n monthsShort : months,\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n ss : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arDz = moment.defineLocale('ar-dz', {\n months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arKw = moment.defineLocale('ar-kw', {\n months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '0': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر'\n ];\n\n var arLy = moment.defineLocale('ar-ly', {\n months : months,\n monthsShort : months,\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n ss : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arMa = moment.defineLocale('ar-ma', {\n months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n };\n\n var arSa = moment.defineLocale('ar-sa', {\n months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return arSa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arTn = moment.defineLocale('ar-tn', {\n months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss : '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات'\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return arTn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 1: '-inci',\n 5: '-inci',\n 8: '-inci',\n 70: '-inci',\n 80: '-inci',\n 2: '-nci',\n 7: '-nci',\n 20: '-nci',\n 50: '-nci',\n 3: '-üncü',\n 4: '-üncü',\n 100: '-üncü',\n 6: '-ncı',\n 9: '-uncu',\n 10: '-uncu',\n 30: '-uncu',\n 60: '-ıncı',\n 90: '-ıncı'\n };\n\n var az = moment.defineLocale('az', {\n months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[sabah saat] LT',\n nextWeek : '[gələn həftə] dddd [saat] LT',\n lastDay : '[dünən] LT',\n lastWeek : '[keçən həftə] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s əvvəl',\n s : 'birneçə saniyə',\n ss : '%d saniyə',\n m : 'bir dəqiqə',\n mm : '%d dəqiqə',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir il',\n yy : '%d il'\n },\n meridiemParse: /gecə|səhər|gündüz|axşam/,\n isPM : function (input) {\n return /^(gündüz|axşam)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'gecə';\n } else if (hour < 12) {\n return 'səhər';\n } else if (hour < 17) {\n return 'gündüz';\n } else {\n return 'axşam';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n ordinal : function (number) {\n if (number === 0) { // special case for zero\n return number + '-ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n 'dd': 'дзень_дні_дзён',\n 'MM': 'месяц_месяцы_месяцаў',\n 'yy': 'год_гады_гадоў'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n\n var be = moment.defineLocale('be', {\n months : {\n format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n },\n monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n weekdays : {\n format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n },\n weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., HH:mm',\n LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n },\n calendar : {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'праз %s',\n past : '%s таму',\n s : 'некалькі секунд',\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithPlural,\n hh : relativeTimeWithPlural,\n d : 'дзень',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM : function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var bg = moment.defineLocale('bg', {\n months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Днес в] LT',\n nextDay : '[Утре в] LT',\n nextWeek : 'dddd [в] LT',\n lastDay : '[Вчера в] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[В изминалата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[В изминалия] dddd [в] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'след %s',\n past : 'преди %s',\n s : 'няколко секунди',\n ss : '%d секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дни',\n M : 'месец',\n MM : '%d месеца',\n y : 'година',\n yy : '%d години'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var bm = moment.defineLocale('bm', {\n months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'MMMM [tile] D [san] YYYY',\n LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n },\n calendar : {\n sameDay : '[Bi lɛrɛ] LT',\n nextDay : '[Sini lɛrɛ] LT',\n nextWeek : 'dddd [don lɛrɛ] LT',\n lastDay : '[Kunu lɛrɛ] LT',\n lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s kɔnɔ',\n past : 'a bɛ %s bɔ',\n s : 'sanga dama dama',\n ss : 'sekondi %d',\n m : 'miniti kelen',\n mm : 'miniti %d',\n h : 'lɛrɛ kelen',\n hh : 'lɛrɛ %d',\n d : 'tile kelen',\n dd : 'tile %d',\n M : 'kalo kelen',\n MM : 'kalo %d',\n y : 'san kelen',\n yy : 'san %d'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '১',\n '2': '২',\n '3': '৩',\n '4': '৪',\n '5': '৫',\n '6': '৬',\n '7': '৭',\n '8': '৮',\n '9': '৯',\n '0': '০'\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0'\n };\n\n var bn = moment.defineLocale('bn', {\n months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n longDateFormat : {\n LT : 'A h:mm সময়',\n LTS : 'A h:mm:ss সময়',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm সময়',\n LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n },\n calendar : {\n sameDay : '[আজ] LT',\n nextDay : '[আগামীকাল] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[গতকাল] LT',\n lastWeek : '[গত] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s পরে',\n past : '%s আগে',\n s : 'কয়েক সেকেন্ড',\n ss : '%d সেকেন্ড',\n m : 'এক মিনিট',\n mm : '%d মিনিট',\n h : 'এক ঘন্টা',\n hh : '%d ঘন্টা',\n d : 'এক দিন',\n dd : '%d দিন',\n M : 'এক মাস',\n MM : '%d মাস',\n y : 'এক বছর',\n yy : '%d বছর'\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'রাত' && hour >= 4) ||\n (meridiem === 'দুপুর' && hour < 5) ||\n meridiem === 'বিকাল') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকাল';\n } else {\n return 'রাত';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '༡',\n '2': '༢',\n '3': '༣',\n '4': '༤',\n '5': '༥',\n '6': '༦',\n '7': '༧',\n '8': '༨',\n '9': '༩',\n '0': '༠'\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0'\n };\n\n var bo = moment.defineLocale('bo', {\n months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[དི་རིང] LT',\n nextDay : '[སང་ཉིན] LT',\n nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay : '[ཁ་སང] LT',\n lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ལ་',\n past : '%s སྔན་ལ',\n s : 'ལམ་སང',\n ss : '%d སྐར་ཆ།',\n m : 'སྐར་མ་གཅིག',\n mm : '%d སྐར་མ',\n h : 'ཆུ་ཚོད་གཅིག',\n hh : '%d ཆུ་ཚོད',\n d : 'ཉིན་གཅིག',\n dd : '%d ཉིན་',\n M : 'ཟླ་བ་གཅིག',\n MM : '%d ཟླ་བ',\n y : 'ལོ་གཅིག',\n yy : '%d ལོ'\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n 'mm': 'munutenn',\n 'MM': 'miz',\n 'dd': 'devezh'\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n 'm': 'v',\n 'b': 'v',\n 'd': 'z'\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var br = moment.defineLocale('br', {\n months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h[e]mm A',\n LTS : 'h[e]mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D [a viz] MMMM YYYY',\n LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n },\n calendar : {\n sameDay : '[Hiziv da] LT',\n nextDay : '[Warc\\'hoazh da] LT',\n nextWeek : 'dddd [da] LT',\n lastDay : '[Dec\\'h da] LT',\n lastWeek : 'dddd [paset da] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'a-benn %s',\n past : '%s \\'zo',\n s : 'un nebeud segondennoù',\n ss : '%d eilenn',\n m : 'ur vunutenn',\n mm : relativeTimeWithMutation,\n h : 'un eur',\n hh : '%d eur',\n d : 'un devezh',\n dd : relativeTimeWithMutation,\n M : 'ur miz',\n MM : relativeTimeWithMutation,\n y : 'ur bloaz',\n yy : specialMutationForYears\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n ordinal : function (number) {\n var output = (number === 1) ? 'añ' : 'vet';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ca = moment.defineLocale('ca', {\n months : {\n standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n isFormat: /D[oD]?(\\s)+MMMM/\n },\n monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n monthsParseExact : true,\n weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [de] YYYY',\n ll : 'D MMM YYYY',\n LLL : 'D MMMM [de] YYYY [a les] H:mm',\n lll : 'D MMM YYYY, H:mm',\n LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll : 'ddd D MMM YYYY, H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextDay : function () {\n return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastDay : function () {\n return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'd\\'aquí %s',\n past : 'fa %s',\n s : 'uns segons',\n ss : '%d segons',\n m : 'un minut',\n mm : '%d minuts',\n h : 'una hora',\n hh : '%d hores',\n d : 'un dia',\n dd : '%d dies',\n M : 'un mes',\n MM : '%d mesos',\n y : 'un any',\n yy : '%d anys'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal : function (number, period) {\n var output = (number === 1) ? 'r' :\n (number === 2) ? 'n' :\n (number === 3) ? 'r' :\n (number === 4) ? 't' : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ca;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n break;\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n break;\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months : months,\n monthsShort : monthsShort,\n monthsRegex : monthsRegex,\n monthsShortRegex : monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm',\n l : 'D. M. YYYY'\n },\n calendar : {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'před %s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var cv = moment.defineLocale('cv', {\n months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n },\n calendar : {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L'\n },\n relativeTime : {\n future : function (output) {\n var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n return output + affix;\n },\n past : '%s каялла',\n s : 'пӗр-ик ҫеккунт',\n ss : '%d ҫеккунт',\n m : 'пӗр минут',\n mm : '%d минут',\n h : 'пӗр сехет',\n hh : '%d сехет',\n d : 'пӗр кун',\n dd : '%d кун',\n M : 'пӗр уйӑх',\n MM : '%d уйӑх',\n y : 'пӗр ҫул',\n yy : '%d ҫул'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal : '%d-мӗш',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n weekdaysParseExact : true,\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS : 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n ss: '%d eiliad',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var da = moment.defineLocale('da', {\n months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay : '[i dag kl.] LT',\n nextDay : '[i morgen kl.] LT',\n nextWeek : 'på dddd [kl.] LT',\n lastDay : '[i går kl.] LT',\n lastWeek : '[i] dddd[s kl.] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'få sekunder',\n ss : '%d sekunder',\n m : 'et minut',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dage',\n M : 'en måned',\n MM : '%d måneder',\n y : 'et år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var de = moment.defineLocale('de', {\n months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deAt = moment.defineLocale('de-at', {\n months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'ޖެނުއަރީ',\n 'ފެބްރުއަރީ',\n 'މާރިޗު',\n 'އޭޕްރީލު',\n 'މޭ',\n 'ޖޫން',\n 'ޖުލައި',\n 'އޯގަސްޓު',\n 'ސެޕްޓެމްބަރު',\n 'އޮކްޓޯބަރު',\n 'ނޮވެމްބަރު',\n 'ޑިސެމްބަރު'\n ], weekdays = [\n 'އާދިއްތަ',\n 'ހޯމަ',\n 'އަންގާރަ',\n 'ބުދަ',\n 'ބުރާސްފަތި',\n 'ހުކުރު',\n 'ހޮނިހިރު'\n ];\n\n var dv = moment.defineLocale('dv', {\n months : months,\n monthsShort : months,\n weekdays : weekdays,\n weekdaysShort : weekdays,\n weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n longDateFormat : {\n\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/M/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /މކ|މފ/,\n isPM : function (input) {\n return 'މފ' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'މކ';\n } else {\n return 'މފ';\n }\n },\n calendar : {\n sameDay : '[މިއަދު] LT',\n nextDay : '[މާދަމާ] LT',\n nextWeek : 'dddd LT',\n lastDay : '[އިއްޔެ] LT',\n lastWeek : '[ފާއިތުވި] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ތެރޭގައި %s',\n past : 'ކުރިން %s',\n s : 'ސިކުންތުކޮޅެއް',\n ss : 'd% ސިކުންތު',\n m : 'މިނިޓެއް',\n mm : 'މިނިޓު %d',\n h : 'ގަޑިއިރެއް',\n hh : 'ގަޑިއިރު %d',\n d : 'ދުވަހެއް',\n dd : 'ދުވަސް %d',\n M : 'މަހެއް',\n MM : 'މަސް %d',\n y : 'އަހަރެއް',\n yy : 'އަހަރު %d'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 7, // Sunday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n months : function (momentToFormat, format) {\n if (!momentToFormat) {\n return this._monthsNominativeEl;\n } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM : function (input) {\n return ((input + '').toLowerCase()[0] === 'μ');\n },\n meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendarEl : {\n sameDay : '[Σήμερα {}] LT',\n nextDay : '[Αύριο {}] LT',\n nextWeek : 'dddd [{}] LT',\n lastDay : '[Χθες {}] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse : 'L'\n },\n calendar : function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (isFunction(output)) {\n output = output.apply(mom);\n }\n return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n },\n relativeTime : {\n future : 'σε %s',\n past : '%s πριν',\n s : 'λίγα δευτερόλεπτα',\n ss : '%d δευτερόλεπτα',\n m : 'ένα λεπτό',\n mm : '%d λεπτά',\n h : 'μία ώρα',\n hh : '%d ώρες',\n d : 'μία μέρα',\n dd : '%d μέρες',\n M : 'ένας μήνας',\n MM : '%d μήνες',\n y : 'ένας χρόνος',\n yy : '%d χρόνια'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4st is the first week of the year.\n }\n });\n\n return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enSG = moment.defineLocale('en-SG', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enSG;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enAu = moment.defineLocale('en-au', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enAu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enCa = moment.defineLocale('en-ca', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'YYYY-MM-DD',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enGb = moment.defineLocale('en-gb', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enIe = moment.defineLocale('en-ie', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enIl = moment.defineLocale('en-il', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enNz = moment.defineLocale('en-nz', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var eo = moment.defineLocale('eo', {\n months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D[-a de] MMMM, YYYY',\n LLL : 'D[-a de] MMMM, YYYY HH:mm',\n LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar : {\n sameDay : '[Hodiaŭ je] LT',\n nextDay : '[Morgaŭ je] LT',\n nextWeek : 'dddd [je] LT',\n lastDay : '[Hieraŭ je] LT',\n lastWeek : '[pasinta] dddd [je] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'post %s',\n past : 'antaŭ %s',\n s : 'sekundoj',\n ss : '%d sekundoj',\n m : 'minuto',\n mm : '%d minutoj',\n h : 'horo',\n hh : '%d horoj',\n d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n dd : '%d tagoj',\n M : 'monato',\n MM : '%d monatoj',\n y : 'jaro',\n yy : '%d jaroj'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}a/,\n ordinal : '%da',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var es = moment.defineLocale('es', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex : monthsRegex,\n monthsShortRegex : monthsRegex,\n monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY H:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esDo = moment.defineLocale('es-do', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY h:mm A',\n LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esUs = moment.defineLocale('es-us', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'MM/DD/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY h:mm A',\n LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return esUs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n 'ss': [number + 'sekundi', number + 'sekundit'],\n 'm' : ['ühe minuti', 'üks minut'],\n 'mm': [number + ' minuti', number + ' minutit'],\n 'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n 'hh': [number + ' tunni', number + ' tundi'],\n 'd' : ['ühe päeva', 'üks päev'],\n 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n 'MM': [number + ' kuu', number + ' kuud'],\n 'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n 'yy': [number + ' aasta', number + ' aastat']\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Täna,] LT',\n nextDay : '[Homme,] LT',\n nextWeek : '[Järgmine] dddd LT',\n lastDay : '[Eile,] LT',\n lastWeek : '[Eelmine] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s pärast',\n past : '%s tagasi',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : '%d päeva',\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return et;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var eu = moment.defineLocale('eu', {\n months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n monthsParseExact : true,\n weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY[ko] MMMM[ren] D[a]',\n LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l : 'YYYY-M-D',\n ll : 'YYYY[ko] MMM D[a]',\n lll : 'YYYY[ko] MMM D[a] HH:mm',\n llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n },\n calendar : {\n sameDay : '[gaur] LT[etan]',\n nextDay : '[bihar] LT[etan]',\n nextWeek : 'dddd LT[etan]',\n lastDay : '[atzo] LT[etan]',\n lastWeek : '[aurreko] dddd LT[etan]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s barru',\n past : 'duela %s',\n s : 'segundo batzuk',\n ss : '%d segundo',\n m : 'minutu bat',\n mm : '%d minutu',\n h : 'ordu bat',\n hh : '%d ordu',\n d : 'egun bat',\n dd : '%d egun',\n M : 'hilabete bat',\n MM : '%d hilabete',\n y : 'urte bat',\n yy : '%d urte'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '۱',\n '2': '۲',\n '3': '۳',\n '4': '۴',\n '5': '۵',\n '6': '۶',\n '7': '۷',\n '8': '۸',\n '9': '۹',\n '0': '۰'\n }, numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0'\n };\n\n var fa = moment.defineLocale('fa', {\n months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar : {\n sameDay : '[امروز ساعت] LT',\n nextDay : '[فردا ساعت] LT',\n nextWeek : 'dddd [ساعت] LT',\n lastDay : '[دیروز ساعت] LT',\n lastWeek : 'dddd [پیش] [ساعت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'در %s',\n past : '%s پیش',\n s : 'چند ثانیه',\n ss : 'ثانیه d%',\n m : 'یک دقیقه',\n mm : '%d دقیقه',\n h : 'یک ساعت',\n hh : '%d ساعت',\n d : 'یک روز',\n dd : '%d روز',\n M : 'یک ماه',\n MM : '%d ماه',\n y : 'یک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal : '%dم',\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n numbersFuture = [\n 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n numbersPast[7], numbersPast[8], numbersPast[9]\n ];\n function translate(number, withoutSuffix, key, isFuture) {\n var result = '';\n switch (key) {\n case 's':\n return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n case 'ss':\n return isFuture ? 'sekunnin' : 'sekuntia';\n case 'm':\n return isFuture ? 'minuutin' : 'minuutti';\n case 'mm':\n result = isFuture ? 'minuutin' : 'minuuttia';\n break;\n case 'h':\n return isFuture ? 'tunnin' : 'tunti';\n case 'hh':\n result = isFuture ? 'tunnin' : 'tuntia';\n break;\n case 'd':\n return isFuture ? 'päivän' : 'päivä';\n case 'dd':\n result = isFuture ? 'päivän' : 'päivää';\n break;\n case 'M':\n return isFuture ? 'kuukauden' : 'kuukausi';\n case 'MM':\n result = isFuture ? 'kuukauden' : 'kuukautta';\n break;\n case 'y':\n return isFuture ? 'vuoden' : 'vuosi';\n case 'yy':\n result = isFuture ? 'vuoden' : 'vuotta';\n break;\n }\n result = verbalNumber(number, isFuture) + ' ' + result;\n return result;\n }\n function verbalNumber(number, isFuture) {\n return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n }\n\n var fi = moment.defineLocale('fi', {\n months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'Do MMMM[ta] YYYY',\n LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n l : 'D.M.YYYY',\n ll : 'Do MMM YYYY',\n lll : 'Do MMM YYYY, [klo] HH.mm',\n llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n },\n calendar : {\n sameDay : '[tänään] [klo] LT',\n nextDay : '[huomenna] [klo] LT',\n nextWeek : 'dddd [klo] LT',\n lastDay : '[eilen] [klo] LT',\n lastWeek : '[viime] dddd[na] [klo] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s päästä',\n past : '%s sitten',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var fo = moment.defineLocale('fo', {\n months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D. MMMM, YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Í dag kl.] LT',\n nextDay : '[Í morgin kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[Í gjár kl.] LT',\n lastWeek : '[síðstu] dddd [kl] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'um %s',\n past : '%s síðani',\n s : 'fá sekund',\n ss : '%d sekundir',\n m : 'ein minuttur',\n mm : '%d minuttir',\n h : 'ein tími',\n hh : '%d tímar',\n d : 'ein dagur',\n dd : '%d dagar',\n M : 'ein mánaður',\n MM : '%d mánaðir',\n y : 'eitt ár',\n yy : '%d ár'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var fr = moment.defineLocale('fr', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n ordinal : function (number, period) {\n switch (period) {\n // TODO: Return 'e' when day of month > 1. Move this case inside\n // block for masculine words below.\n // See https://github.com/moment/moment/issues/3375\n case 'D':\n return number + (number === 1 ? 'er' : '');\n\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var frCa = moment.defineLocale('fr-ca', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal : function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n }\n });\n\n return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var frCh = moment.defineLocale('fr-ch', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal : function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n var fy = moment.defineLocale('fy', {\n months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n monthsParseExact : true,\n weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'oer %s',\n past : '%s lyn',\n s : 'in pear sekonden',\n ss : '%d sekonden',\n m : 'ien minút',\n mm : '%d minuten',\n h : 'ien oere',\n hh : '%d oeren',\n d : 'ien dei',\n dd : '%d dagen',\n M : 'ien moanne',\n MM : '%d moannen',\n y : 'ien jier',\n yy : '%d jierren'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n var months = [\n 'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n ];\n\n var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné aig] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d mí',\n y: 'bliain',\n yy: '%d bliain'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ga;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n ];\n\n var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months : months,\n monthsShort : monthsShort,\n monthsParseExact : true,\n weekdays : weekdays,\n weekdaysShort : weekdaysShort,\n weekdaysMin : weekdaysMin,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[An-diugh aig] LT',\n nextDay : '[A-màireach aig] LT',\n nextWeek : 'dddd [aig] LT',\n lastDay : '[An-dè aig] LT',\n lastWeek : 'dddd [seo chaidh] [aig] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ann an %s',\n past : 'bho chionn %s',\n s : 'beagan diogan',\n ss : '%d diogan',\n m : 'mionaid',\n mm : '%d mionaidean',\n h : 'uair',\n hh : '%d uairean',\n d : 'latha',\n dd : '%d latha',\n M : 'mìos',\n MM : '%d mìosan',\n y : 'bliadhna',\n yy : '%d bliadhna'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n ordinal : function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return gd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var gl = moment.defineLocale('gl', {\n months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY H:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextDay : function () {\n return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n lastDay : function () {\n return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n },\n lastWeek : function () {\n return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : function (str) {\n if (str.indexOf('un') === 0) {\n return 'n' + str;\n }\n return 'en ' + str;\n },\n past : 'hai %s',\n s : 'uns segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'unha hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['thodde secondanim', 'thodde second'],\n 'ss': [number + ' secondanim', number + ' second'],\n 'm': ['eka mintan', 'ek minute'],\n 'mm': [number + ' mintanim', number + ' mintam'],\n 'h': ['eka voran', 'ek vor'],\n 'hh': [number + ' voranim', number + ' voram'],\n 'd': ['eka disan', 'ek dis'],\n 'dd': [number + ' disanim', number + ' dis'],\n 'M': ['eka mhoinean', 'ek mhoino'],\n 'MM': [number + ' mhoineanim', number + ' mhoine'],\n 'y': ['eka vorsan', 'ek voros'],\n 'yy': [number + ' vorsanim', number + ' vorsam']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var gomLatn = moment.defineLocale('gom-latn', {\n months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'A h:mm [vazta]',\n LTS : 'A h:mm:ss [vazta]',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY A h:mm [vazta]',\n LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n },\n calendar : {\n sameDay: '[Aiz] LT',\n nextDay: '[Faleam] LT',\n nextWeek: '[Ieta to] dddd[,] LT',\n lastDay: '[Kal] LT',\n lastWeek: '[Fatlo] dddd[,] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s',\n past : '%s adim',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n ordinal : function (number, period) {\n switch (period) {\n // the ordinal 'er' only applies to day of the month\n case 'D':\n return number + 'er';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n },\n meridiemParse: /rati|sokalli|donparam|sanje/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'rati') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'sokalli') {\n return hour;\n } else if (meridiem === 'donparam') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'sanje') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'rati';\n } else if (hour < 12) {\n return 'sokalli';\n } else if (hour < 16) {\n return 'donparam';\n } else if (hour < 20) {\n return 'sanje';\n } else {\n return 'rati';\n }\n }\n });\n\n return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '૧',\n '2': '૨',\n '3': '૩',\n '4': '૪',\n '5': '૫',\n '6': '૬',\n '7': '૭',\n '8': '૮',\n '9': '૯',\n '0': '૦'\n },\n numberMap = {\n '૧': '1',\n '૨': '2',\n '૩': '3',\n '૪': '4',\n '૫': '5',\n '૬': '6',\n '૭': '7',\n '૮': '8',\n '૯': '9',\n '૦': '0'\n };\n\n var gu = moment.defineLocale('gu', {\n months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n monthsParseExact: true,\n weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm વાગ્યે',\n LTS: 'A h:mm:ss વાગ્યે',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n },\n calendar: {\n sameDay: '[આજ] LT',\n nextDay: '[કાલે] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ગઇકાલે] LT',\n lastWeek: '[પાછલા] dddd, LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%s મા',\n past: '%s પેહલા',\n s: 'અમુક પળો',\n ss: '%d સેકંડ',\n m: 'એક મિનિટ',\n mm: '%d મિનિટ',\n h: 'એક કલાક',\n hh: '%d કલાક',\n d: 'એક દિવસ',\n dd: '%d દિવસ',\n M: 'એક મહિનો',\n MM: '%d મહિનો',\n y: 'એક વર્ષ',\n yy: '%d વર્ષ'\n },\n preparse: function (string) {\n return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'રાત') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'સવાર') {\n return hour;\n } else if (meridiem === 'બપોર') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'સાંજ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'રાત';\n } else if (hour < 10) {\n return 'સવાર';\n } else if (hour < 17) {\n return 'બપોર';\n } else if (hour < 20) {\n return 'સાંજ';\n } else {\n return 'રાત';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var he = moment.defineLocale('he', {\n months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [ב]MMMM YYYY',\n LLL : 'D [ב]MMMM YYYY HH:mm',\n LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n l : 'D/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[היום ב־]LT',\n nextDay : '[מחר ב־]LT',\n nextWeek : 'dddd [בשעה] LT',\n lastDay : '[אתמול ב־]LT',\n lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'בעוד %s',\n past : 'לפני %s',\n s : 'מספר שניות',\n ss : '%d שניות',\n m : 'דקה',\n mm : '%d דקות',\n h : 'שעה',\n hh : function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d : 'יום',\n dd : function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M : 'חודש',\n MM : function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y : 'שנה',\n yy : function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n }\n },\n meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM : function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n }\n });\n\n return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var hi = moment.defineLocale('hi', {\n months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n monthsParseExact: true,\n weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm बजे',\n LTS : 'A h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[कल] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[कल] LT',\n lastWeek : '[पिछले] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s में',\n past : '%s पहले',\n s : 'कुछ ही क्षण',\n ss : '%d सेकंड',\n m : 'एक मिनट',\n mm : '%d मिनट',\n h : 'एक घंटा',\n hh : '%d घंटे',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महीने',\n MM : '%d महीने',\n y : 'एक वर्ष',\n yy : '%d वर्ष'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months : {\n format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n },\n monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n function translate(number, withoutSuffix, key, isFuture) {\n var num = number;\n switch (key) {\n case 's':\n return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n case 'ss':\n return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n case 'm':\n return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'mm':\n return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'h':\n return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'hh':\n return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'd':\n return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'dd':\n return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'M':\n return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'MM':\n return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'y':\n return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n case 'yy':\n return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n }\n return '';\n }\n function week(isFuture) {\n return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n }\n\n var hu = moment.defineLocale('hu', {\n months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'YYYY.MM.DD.',\n LL : 'YYYY. MMMM D.',\n LLL : 'YYYY. MMMM D. H:mm',\n LLLL : 'YYYY. MMMM D., dddd H:mm'\n },\n meridiemParse: /de|du/i,\n isPM: function (input) {\n return input.charAt(1).toLowerCase() === 'u';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower === true ? 'de' : 'DE';\n } else {\n return isLower === true ? 'du' : 'DU';\n }\n },\n calendar : {\n sameDay : '[ma] LT[-kor]',\n nextDay : '[holnap] LT[-kor]',\n nextWeek : function () {\n return week.call(this, true);\n },\n lastDay : '[tegnap] LT[-kor]',\n lastWeek : function () {\n return week.call(this, false);\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s múlva',\n past : '%s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var hyAm = moment.defineLocale('hy-am', {\n months : {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n },\n monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY թ.',\n LLL : 'D MMMM YYYY թ., HH:mm',\n LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n },\n calendar : {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s հետո',\n past : '%s առաջ',\n s : 'մի քանի վայրկյան',\n ss : '%d վայրկյան',\n m : 'րոպե',\n mm : '%d րոպե',\n h : 'ժամ',\n hh : '%d ժամ',\n d : 'օր',\n dd : '%d օր',\n M : 'ամիս',\n MM : '%d ամիս',\n y : 'տարի',\n yy : '%d տարի'\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem : function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var id = moment.defineLocale('id', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Besok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kemarin pukul] LT',\n lastWeek : 'dddd [lalu pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lalu',\n s : 'beberapa detik',\n ss : '%d detik',\n m : 'semenit',\n mm : '%d menit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return id;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n case 'ss':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n }\n return result + 'sekúnda';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n },\n calendar : {\n sameDay : '[í dag kl.] LT',\n nextDay : '[á morgun kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[í gær kl.] LT',\n lastWeek : '[síðasta] dddd [kl.] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'eftir %s',\n past : 'fyrir %s síðan',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : 'klukkustund',\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return is;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var it = moment.defineLocale('it', {\n months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : function (s) {\n return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past : '%s fa',\n s : 'alcuni secondi',\n ss : '%d secondi',\n m : 'un minuto',\n mm : '%d minuti',\n h : 'un\\'ora',\n hh : '%d ore',\n d : 'un giorno',\n dd : '%d giorni',\n M : 'un mese',\n MM : '%d mesi',\n y : 'un anno',\n yy : '%d anni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var itCh = moment.defineLocale('it-ch', {\n months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : function (s) {\n return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past : '%s fa',\n s : 'alcuni secondi',\n ss : '%d secondi',\n m : 'un minuto',\n mm : '%d minuti',\n h : 'un\\'ora',\n hh : '%d ore',\n d : 'un giorno',\n dd : '%d giorni',\n M : 'un mese',\n MM : '%d mesi',\n y : 'un anno',\n yy : '%d anni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ja = moment.defineLocale('ja', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日 dddd HH:mm',\n l : 'YYYY/MM/DD',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日(ddd) HH:mm'\n },\n meridiemParse: /午前|午後/i,\n isPM : function (input) {\n return input === '午後';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar : {\n sameDay : '[今日] LT',\n nextDay : '[明日] LT',\n nextWeek : function (now) {\n if (now.week() < this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay : '[昨日] LT',\n lastWeek : function (now) {\n if (this.week() < now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}日/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s後',\n past : '%s前',\n s : '数秒',\n ss : '%d秒',\n m : '1分',\n mm : '%d分',\n h : '1時間',\n hh : '%d時間',\n d : '1日',\n dd : '%d日',\n M : '1ヶ月',\n MM : '%dヶ月',\n y : '1年',\n yy : '%d年'\n }\n });\n\n return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var jv = moment.defineLocale('jv', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /enjing|siyang|sonten|ndalu/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'enjing') {\n return hour;\n } else if (meridiem === 'siyang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'enjing';\n } else if (hours < 15) {\n return 'siyang';\n } else if (hours < 19) {\n return 'sonten';\n } else {\n return 'ndalu';\n }\n },\n calendar : {\n sameDay : '[Dinten puniko pukul] LT',\n nextDay : '[Mbenjang pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kala wingi pukul] LT',\n lastWeek : 'dddd [kepengker pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'wonten ing %s',\n past : '%s ingkang kepengker',\n s : 'sawetawis detik',\n ss : '%d detik',\n m : 'setunggal menit',\n mm : '%d menit',\n h : 'setunggal jam',\n hh : '%d jam',\n d : 'sedinten',\n dd : '%d dinten',\n M : 'sewulan',\n MM : '%d wulan',\n y : 'setaun',\n yy : '%d taun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ka = moment.defineLocale('ka', {\n months : {\n standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n },\n monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays : {\n standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n isFormat: /(წინა|შემდეგ)/\n },\n weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[დღეს] LT[-ზე]',\n nextDay : '[ხვალ] LT[-ზე]',\n lastDay : '[გუშინ] LT[-ზე]',\n nextWeek : '[შემდეგ] dddd LT[-ზე]',\n lastWeek : '[წინა] dddd LT-ზე',\n sameElse : 'L'\n },\n relativeTime : {\n future : function (s) {\n return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n s.replace(/ი$/, 'ში') :\n s + 'ში';\n },\n past : function (s) {\n if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if ((/წელი/).test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n },\n s : 'რამდენიმე წამი',\n ss : '%d წამი',\n m : 'წუთი',\n mm : '%d წუთი',\n h : 'საათი',\n hh : '%d საათი',\n d : 'დღე',\n dd : '%d დღე',\n M : 'თვე',\n MM : '%d თვე',\n y : 'წელი',\n yy : '%d წელი'\n },\n dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal : function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week : {\n dow : 1,\n doy : 7\n }\n });\n\n return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-ші',\n 1: '-ші',\n 2: '-ші',\n 3: '-ші',\n 4: '-ші',\n 5: '-ші',\n 6: '-шы',\n 7: '-ші',\n 8: '-ші',\n 9: '-шы',\n 10: '-шы',\n 20: '-шы',\n 30: '-шы',\n 40: '-шы',\n 50: '-ші',\n 60: '-шы',\n 70: '-ші',\n 80: '-ші',\n 90: '-шы',\n 100: '-ші'\n };\n\n var kk = moment.defineLocale('kk', {\n months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Бүгін сағат] LT',\n nextDay : '[Ертең сағат] LT',\n nextWeek : 'dddd [сағат] LT',\n lastDay : '[Кеше сағат] LT',\n lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ішінде',\n past : '%s бұрын',\n s : 'бірнеше секунд',\n ss : '%d секунд',\n m : 'бір минут',\n mm : '%d минут',\n h : 'бір сағат',\n hh : '%d сағат',\n d : 'бір күн',\n dd : '%d күн',\n M : 'бір ай',\n MM : '%d ай',\n y : 'бір жыл',\n yy : '%d жыл'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n ordinal : function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '១',\n '2': '២',\n '3': '៣',\n '4': '៤',\n '5': '៥',\n '6': '៦',\n '7': '៧',\n '8': '៨',\n '9': '៩',\n '0': '០'\n }, numberMap = {\n '១': '1',\n '២': '2',\n '៣': '3',\n '៤': '4',\n '៥': '5',\n '៦': '6',\n '៧': '7',\n '៨': '8',\n '៩': '9',\n '០': '0'\n };\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /ព្រឹក|ល្ងាច/,\n isPM: function (input) {\n return input === 'ល្ងាច';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ព្រឹក';\n } else {\n return 'ល្ងាច';\n }\n },\n calendar: {\n sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n ss: '%d វិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ'\n },\n dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n ordinal : 'ទី%d',\n preparse: function (string) {\n return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '೧',\n '2': '೨',\n '3': '೩',\n '4': '೪',\n '5': '೫',\n '6': '೬',\n '7': '೭',\n '8': '೮',\n '9': '೯',\n '0': '೦'\n },\n numberMap = {\n '೧': '1',\n '೨': '2',\n '೩': '3',\n '೪': '4',\n '೫': '5',\n '೬': '6',\n '೭': '7',\n '೮': '8',\n '೯': '9',\n '೦': '0'\n };\n\n var kn = moment.defineLocale('kn', {\n months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n monthsParseExact: true,\n weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[ಇಂದು] LT',\n nextDay : '[ನಾಳೆ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ನಿನ್ನೆ] LT',\n lastWeek : '[ಕೊನೆಯ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ನಂತರ',\n past : '%s ಹಿಂದೆ',\n s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n ss : '%d ಸೆಕೆಂಡುಗಳು',\n m : 'ಒಂದು ನಿಮಿಷ',\n mm : '%d ನಿಮಿಷ',\n h : 'ಒಂದು ಗಂಟೆ',\n hh : '%d ಗಂಟೆ',\n d : 'ಒಂದು ದಿನ',\n dd : '%d ದಿನ',\n M : 'ಒಂದು ತಿಂಗಳು',\n MM : '%d ತಿಂಗಳು',\n y : 'ಒಂದು ವರ್ಷ',\n yy : '%d ವರ್ಷ'\n },\n preparse: function (string) {\n return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ರಾತ್ರಿ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n return hour;\n } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ಸಂಜೆ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ರಾತ್ರಿ';\n } else if (hour < 10) {\n return 'ಬೆಳಿಗ್ಗೆ';\n } else if (hour < 17) {\n return 'ಮಧ್ಯಾಹ್ನ';\n } else if (hour < 20) {\n return 'ಸಂಜೆ';\n } else {\n return 'ರಾತ್ರಿ';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n ordinal : function (number) {\n return number + 'ನೇ';\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ko = moment.defineLocale('ko', {\n months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'YYYY.MM.DD.',\n LL : 'YYYY년 MMMM D일',\n LLL : 'YYYY년 MMMM D일 A h:mm',\n LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n l : 'YYYY.MM.DD.',\n ll : 'YYYY년 MMMM D일',\n lll : 'YYYY년 MMMM D일 A h:mm',\n llll : 'YYYY년 MMMM D일 dddd A h:mm'\n },\n calendar : {\n sameDay : '오늘 LT',\n nextDay : '내일 LT',\n nextWeek : 'dddd LT',\n lastDay : '어제 LT',\n lastWeek : '지난주 dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s 후',\n past : '%s 전',\n s : '몇 초',\n ss : '%d초',\n m : '1분',\n mm : '%d분',\n h : '한 시간',\n hh : '%d시간',\n d : '하루',\n dd : '%d일',\n M : '한 달',\n MM : '%d달',\n y : '일 년',\n yy : '%d년'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '일';\n case 'M':\n return number + '월';\n case 'w':\n case 'W':\n return number + '주';\n default:\n return number;\n }\n },\n meridiemParse : /오전|오후/,\n isPM : function (token) {\n return token === '오후';\n },\n meridiem : function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n }\n });\n\n return ko;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n },\n months = [\n 'کانونی دووەم',\n 'شوبات',\n 'ئازار',\n 'نیسان',\n 'ئایار',\n 'حوزەیران',\n 'تەمموز',\n 'ئاب',\n 'ئەیلوول',\n 'تشرینی یەكەم',\n 'تشرینی دووەم',\n 'كانونی یەکەم'\n ];\n\n\n var ku = moment.defineLocale('ku', {\n months : months,\n monthsShort : months,\n weekdays : 'یهكشهممه_دووشهممه_سێشهممه_چوارشهممه_پێنجشهممه_ههینی_شهممه'.split('_'),\n weekdaysShort : 'یهكشهم_دووشهم_سێشهم_چوارشهم_پێنجشهم_ههینی_شهممه'.split('_'),\n weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /ئێواره|بهیانی/,\n isPM: function (input) {\n return /ئێواره/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'بهیانی';\n } else {\n return 'ئێواره';\n }\n },\n calendar : {\n sameDay : '[ئهمرۆ كاتژمێر] LT',\n nextDay : '[بهیانی كاتژمێر] LT',\n nextWeek : 'dddd [كاتژمێر] LT',\n lastDay : '[دوێنێ كاتژمێر] LT',\n lastWeek : 'dddd [كاتژمێر] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'له %s',\n past : '%s',\n s : 'چهند چركهیهك',\n ss : 'چركه %d',\n m : 'یهك خولهك',\n mm : '%d خولهك',\n h : 'یهك كاتژمێر',\n hh : '%d كاتژمێر',\n d : 'یهك ڕۆژ',\n dd : '%d ڕۆژ',\n M : 'یهك مانگ',\n MM : '%d مانگ',\n y : 'یهك ساڵ',\n yy : '%d ساڵ'\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return ku;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-чү',\n 1: '-чи',\n 2: '-чи',\n 3: '-чү',\n 4: '-чү',\n 5: '-чи',\n 6: '-чы',\n 7: '-чи',\n 8: '-чи',\n 9: '-чу',\n 10: '-чу',\n 20: '-чы',\n 30: '-чу',\n 40: '-чы',\n 50: '-чү',\n 60: '-чы',\n 70: '-чи',\n 80: '-чи',\n 90: '-чу',\n 100: '-чү'\n };\n\n var ky = moment.defineLocale('ky', {\n months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Бүгүн саат] LT',\n nextDay : '[Эртең саат] LT',\n nextWeek : 'dddd [саат] LT',\n lastDay : '[Кечээ саат] LT',\n lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ичинде',\n past : '%s мурун',\n s : 'бирнече секунд',\n ss : '%d секунд',\n m : 'бир мүнөт',\n mm : '%d мүнөт',\n h : 'бир саат',\n hh : '%d саат',\n d : 'бир күн',\n dd : '%d күн',\n M : 'бир ай',\n MM : '%d ай',\n y : 'бир жыл',\n yy : '%d жыл'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n ordinal : function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eng Minutt', 'enger Minutt'],\n 'h': ['eng Stonn', 'enger Stonn'],\n 'd': ['een Dag', 'engem Dag'],\n 'M': ['ee Mount', 'engem Mount'],\n 'y': ['ee Joer', 'engem Joer']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n function processFutureTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'a ' + string;\n }\n return 'an ' + string;\n }\n function processPastTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'viru ' + string;\n }\n return 'virun ' + string;\n }\n /**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\n function eifelerRegelAppliesToNumber(number) {\n number = parseInt(number, 10);\n if (isNaN(number)) {\n return false;\n }\n if (number < 0) {\n // Negative Number --> always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10, firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n }\n },\n relativeTime : {\n future : processFutureTime,\n past : processPastTime,\n s : 'e puer Sekonnen',\n ss : '%d Sekonnen',\n m : processRelativeTime,\n mm : '%d Minutten',\n h : processRelativeTime,\n hh : '%d Stonnen',\n d : processRelativeTime,\n dd : '%d Deeg',\n M : processRelativeTime,\n MM : '%d Méint',\n y : processRelativeTime,\n yy : '%d Joer'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var lo = moment.defineLocale('lo', {\n months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar : {\n sameDay : '[ມື້ນີ້ເວລາ] LT',\n nextDay : '[ມື້ອື່ນເວລາ] LT',\n nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ອີກ %s',\n past : '%sຜ່ານມາ',\n s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss : '%d ວິນາທີ' ,\n m : '1 ນາທີ',\n mm : '%d ນາທີ',\n h : '1 ຊົ່ວໂມງ',\n hh : '%d ຊົ່ວໂມງ',\n d : '1 ມື້',\n dd : '%d ມື້',\n M : '1 ເດືອນ',\n MM : '%d ເດືອນ',\n y : '1 ປີ',\n yy : '%d ປີ'\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal : function (number) {\n return 'ທີ່' + number;\n }\n });\n\n return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss' : 'sekundė_sekundžių_sekundes',\n 'm' : 'minutė_minutės_minutę',\n 'mm': 'minutės_minučių_minutes',\n 'h' : 'valanda_valandos_valandą',\n 'hh': 'valandos_valandų_valandas',\n 'd' : 'diena_dienos_dieną',\n 'dd': 'dienos_dienų_dienas',\n 'M' : 'mėnuo_mėnesio_mėnesį',\n 'MM': 'mėnesiai_mėnesių_mėnesius',\n 'y' : 'metai_metų_metus',\n 'yy': 'metai_metų_metus'\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months : {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n },\n monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays : {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n isFormat: /dddd HH:mm/\n },\n weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY [m.] MMMM D [d.]',\n LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l : 'YYYY-MM-DD',\n ll : 'YYYY [m.] MMMM D [d.]',\n lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n },\n calendar : {\n sameDay : '[Šiandien] LT',\n nextDay : '[Rytoj] LT',\n nextWeek : 'dddd LT',\n lastDay : '[Vakar] LT',\n lastWeek : '[Praėjusį] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'po %s',\n past : 'prieš %s',\n s : translateSeconds,\n ss : translate,\n m : translateSingular,\n mm : translate,\n h : translateSingular,\n hh : translate,\n d : translateSingular,\n dd : translate,\n M : translateSingular,\n MM : translate,\n y : translateSingular,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal : function (number) {\n return number + '-oji';\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'h': 'stundas_stundām_stunda_stundas'.split('_'),\n 'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n 'd': 'dienas_dienām_diena_dienas'.split('_'),\n 'dd': 'dienas_dienām_diena_dienas'.split('_'),\n 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'y': 'gada_gadiem_gads_gadi'.split('_'),\n 'yy': 'gada_gadiem_gads_gadi'.split('_')\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY.',\n LL : 'YYYY. [gada] D. MMMM',\n LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n },\n calendar : {\n sameDay : '[Šodien pulksten] LT',\n nextDay : '[Rīt pulksten] LT',\n nextWeek : 'dddd [pulksten] LT',\n lastDay : '[Vakar pulksten] LT',\n lastWeek : '[Pagājušā] dddd [pulksten] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'pēc %s',\n past : 'pirms %s',\n s : relativeSeconds,\n ss : relativeTimeWithPlural,\n m : relativeTimeWithSingular,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithSingular,\n hh : relativeTimeWithPlural,\n d : relativeTimeWithSingular,\n dd : relativeTimeWithPlural,\n M : relativeTimeWithSingular,\n MM : relativeTimeWithPlural,\n y : relativeTimeWithSingular,\n yy : relativeTimeWithPlural\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact : true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mjesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mk = moment.defineLocale('mk', {\n months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Денес во] LT',\n nextDay : '[Утре во] LT',\n nextWeek : '[Во] dddd [во] LT',\n lastDay : '[Вчера во] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'после %s',\n past : 'пред %s',\n s : 'неколку секунди',\n ss : '%d секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дена',\n M : 'месец',\n MM : '%d месеци',\n y : 'година',\n yy : '%d години'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ml = moment.defineLocale('ml', {\n months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm -നു',\n LTS : 'A h:mm:ss -നു',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm -നു',\n LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n },\n calendar : {\n sameDay : '[ഇന്ന്] LT',\n nextDay : '[നാളെ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ഇന്നലെ] LT',\n lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s കഴിഞ്ഞ്',\n past : '%s മുൻപ്',\n s : 'അൽപ നിമിഷങ്ങൾ',\n ss : '%d സെക്കൻഡ്',\n m : 'ഒരു മിനിറ്റ്',\n mm : '%d മിനിറ്റ്',\n h : 'ഒരു മണിക്കൂർ',\n hh : '%d മണിക്കൂർ',\n d : 'ഒരു ദിവസം',\n dd : '%d ദിവസം',\n M : 'ഒരു മാസം',\n MM : '%d മാസം',\n y : 'ഒരു വർഷം',\n yy : '%d വർഷം'\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n }\n });\n\n return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n monthsParseExact : true,\n weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY оны MMMMын D',\n LLL : 'YYYY оны MMMMын D HH:mm',\n LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM : function (input) {\n return input === 'ҮХ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar : {\n sameDay : '[Өнөөдөр] LT',\n nextDay : '[Маргааш] LT',\n nextWeek : '[Ирэх] dddd LT',\n lastDay : '[Өчигдөр] LT',\n lastWeek : '[Өнгөрсөн] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s дараа',\n past : '%s өмнө',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n }\n });\n\n return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture)\n {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's': output = 'काही सेकंद'; break;\n case 'ss': output = '%d सेकंद'; break;\n case 'm': output = 'एक मिनिट'; break;\n case 'mm': output = '%d मिनिटे'; break;\n case 'h': output = 'एक तास'; break;\n case 'hh': output = '%d तास'; break;\n case 'd': output = 'एक दिवस'; break;\n case 'dd': output = '%d दिवस'; break;\n case 'M': output = 'एक महिना'; break;\n case 'MM': output = '%d महिने'; break;\n case 'y': output = 'एक वर्ष'; break;\n case 'yy': output = '%d वर्षे'; break;\n }\n }\n else {\n switch (string) {\n case 's': output = 'काही सेकंदां'; break;\n case 'ss': output = '%d सेकंदां'; break;\n case 'm': output = 'एका मिनिटा'; break;\n case 'mm': output = '%d मिनिटां'; break;\n case 'h': output = 'एका तासा'; break;\n case 'hh': output = '%d तासां'; break;\n case 'd': output = 'एका दिवसा'; break;\n case 'dd': output = '%d दिवसां'; break;\n case 'M': output = 'एका महिन्या'; break;\n case 'MM': output = '%d महिन्यां'; break;\n case 'y': output = 'एका वर्षा'; break;\n case 'yy': output = '%d वर्षां'; break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n monthsParseExact : true,\n weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm वाजता',\n LTS : 'A h:mm:ss वाजता',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm वाजता',\n LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[उद्या] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात्री') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळी') {\n return hour;\n } else if (meridiem === 'दुपारी') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'सायंकाळी') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात्री';\n } else if (hour < 10) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ms = moment.defineLocale('ms', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var msMy = moment.defineLocale('ms-my', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mt = moment.defineLocale('mt', {\n months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Illum fil-]LT',\n nextDay : '[Għada fil-]LT',\n nextWeek : 'dddd [fil-]LT',\n lastDay : '[Il-bieraħ fil-]LT',\n lastWeek : 'dddd [li għadda] [fil-]LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'f’ %s',\n past : '%s ilu',\n s : 'ftit sekondi',\n ss : '%d sekondi',\n m : 'minuta',\n mm : '%d minuti',\n h : 'siegħa',\n hh : '%d siegħat',\n d : 'ġurnata',\n dd : '%d ġranet',\n M : 'xahar',\n MM : '%d xhur',\n y : 'sena',\n yy : '%d sni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '၁',\n '2': '၂',\n '3': '၃',\n '4': '၄',\n '5': '၅',\n '6': '၆',\n '7': '၇',\n '8': '၈',\n '9': '၉',\n '0': '၀'\n }, numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0'\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss : '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်'\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nb = moment.defineLocale('nb', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact : true,\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'noen sekunder',\n ss : '%d sekunder',\n m : 'ett minutt',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dager',\n M : 'en måned',\n MM : '%d måneder',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var ne = moment.defineLocale('ne', {\n months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n monthsParseExact : true,\n weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'Aको h:mm बजे',\n LTS : 'Aको h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, Aको h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[भोलि] LT',\n nextWeek : '[आउँदो] dddd[,] LT',\n lastDay : '[हिजो] LT',\n lastWeek : '[गएको] dddd[,] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sमा',\n past : '%s अगाडि',\n s : 'केही क्षण',\n ss : '%d सेकेण्ड',\n m : 'एक मिनेट',\n mm : '%d मिनेट',\n h : 'एक घण्टा',\n hh : '%d घण्टा',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महिना',\n MM : '%d महिना',\n y : 'एक बर्ष',\n yy : '%d बर्ष'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nn = moment.defineLocale('nn', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s sidan',\n s : 'nokre sekund',\n ss : '%d sekund',\n m : 'eit minutt',\n mm : '%d minutt',\n h : 'ein time',\n hh : '%d timar',\n d : 'ein dag',\n dd : '%d dagar',\n M : 'ein månad',\n MM : '%d månader',\n y : 'eit år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '੧',\n '2': '੨',\n '3': '੩',\n '4': '੪',\n '5': '੫',\n '6': '੬',\n '7': '੭',\n '8': '੮',\n '9': '੯',\n '0': '੦'\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0'\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm ਵਜੇ',\n LTS : 'A h:mm:ss ਵਜੇ',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n },\n calendar : {\n sameDay : '[ਅਜ] LT',\n nextDay : '[ਕਲ] LT',\n nextWeek : '[ਅਗਲਾ] dddd, LT',\n lastDay : '[ਕਲ] LT',\n lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ਵਿੱਚ',\n past : '%s ਪਿਛਲੇ',\n s : 'ਕੁਝ ਸਕਿੰਟ',\n ss : '%d ਸਕਿੰਟ',\n m : 'ਇਕ ਮਿੰਟ',\n mm : '%d ਮਿੰਟ',\n h : 'ਇੱਕ ਘੰਟਾ',\n hh : '%d ਘੰਟੇ',\n d : 'ਇੱਕ ਦਿਨ',\n dd : '%d ਦਿਨ',\n M : 'ਇੱਕ ਮਹੀਨਾ',\n MM : '%d ਮਹੀਨੇ',\n y : 'ਇੱਕ ਸਾਲ',\n yy : '%d ਸਾਲ'\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n function plural(n) {\n return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months : function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (format === '') {\n // Hack: if format empty we know this is used to generate\n // RegExp by moment. Give then back both valid forms of months\n // in RegExp ready format.\n return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : '%s temu',\n s : 'kilka sekund',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : '1 dzień',\n dd : '%d dni',\n M : 'miesiąc',\n MM : translate,\n y : 'rok',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var pt = moment.defineLocale('pt', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ptBr = moment.defineLocale('pt-br', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'poucos segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº'\n });\n\n return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': 'secunde',\n 'mm': 'minute',\n 'hh': 'ore',\n 'dd': 'zile',\n 'MM': 'luni',\n 'yy': 'ani'\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'peste %s',\n past : '%s în urmă',\n s : 'câteva secunde',\n ss : relativeTimeWithPlural,\n m : 'un minut',\n mm : relativeTimeWithPlural,\n h : 'o oră',\n hh : relativeTimeWithPlural,\n d : 'o zi',\n dd : relativeTimeWithPlural,\n M : 'o lună',\n MM : relativeTimeWithPlural,\n y : 'un an',\n yy : relativeTimeWithPlural\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n 'hh': 'час_часа_часов',\n 'dd': 'день_дня_дней',\n 'MM': 'месяц_месяца_месяцев',\n 'yy': 'год_года_лет'\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months : {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n },\n monthsShort : {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n },\n weekdays : {\n standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n },\n weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соотвествует только сокращённым формам\n monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., H:mm',\n LLLL : 'dddd, D MMMM YYYY г., H:mm'\n },\n calendar : {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'через %s',\n past : '%s назад',\n s : 'несколько секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'час',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM : function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر'\n ];\n var days = [\n 'آچر',\n 'سومر',\n 'اڱارو',\n 'اربع',\n 'خميس',\n 'جمع',\n 'ڇنڇر'\n ];\n\n var sd = moment.defineLocale('sd', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[اڄ] LT',\n nextDay : '[سڀاڻي] LT',\n nextWeek : 'dddd [اڳين هفتي تي] LT',\n lastDay : '[ڪالهه] LT',\n lastWeek : '[گزريل هفتي] dddd [تي] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s پوء',\n past : '%s اڳ',\n s : 'چند سيڪنڊ',\n ss : '%d سيڪنڊ',\n m : 'هڪ منٽ',\n mm : '%d منٽ',\n h : 'هڪ ڪلاڪ',\n hh : '%d ڪلاڪ',\n d : 'هڪ ڏينهن',\n dd : '%d ڏينهن',\n M : 'هڪ مهينو',\n MM : '%d مهينا',\n y : 'هڪ سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var se = moment.defineLocale('se', {\n months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'MMMM D. [b.] YYYY',\n LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n },\n calendar : {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s geažes',\n past : 'maŋit %s',\n s : 'moadde sekunddat',\n ss: '%d sekunddat',\n m : 'okta minuhta',\n mm : '%d minuhtat',\n h : 'okta diimmu',\n hh : '%d diimmut',\n d : 'okta beaivi',\n dd : '%d beaivvit',\n M : 'okta mánnu',\n MM : '%d mánut',\n y : 'okta jahki',\n yy : '%d jagit'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'),\n weekdaysMin : 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'a h:mm',\n LTS : 'a h:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY MMMM D',\n LLL : 'YYYY MMMM D, a h:mm',\n LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n },\n calendar : {\n sameDay : '[අද] LT[ට]',\n nextDay : '[හෙට] LT[ට]',\n nextWeek : 'dddd LT[ට]',\n lastDay : '[ඊයේ] LT[ට]',\n lastWeek : '[පසුගිය] dddd LT[ට]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sකින්',\n past : '%sකට පෙර',\n s : 'තත්පර කිහිපය',\n ss : 'තත්පර %d',\n m : 'මිනිත්තුව',\n mm : 'මිනිත්තු %d',\n h : 'පැය',\n hh : 'පැය %d',\n d : 'දිනය',\n dd : 'දින %d',\n M : 'මාසය',\n MM : 'මාස %d',\n y : 'වසර',\n yy : 'වසර %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal : function (number) {\n return number + ' වැනි';\n },\n meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM : function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n }\n });\n\n return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return (n > 1) && (n < 5);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n break;\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n break;\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months : months,\n monthsShort : monthsShort,\n weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pred %s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danes ob] LT',\n nextDay : '[jutri ob] LT',\n\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay : '[včeraj ob] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'čez %s',\n past : 'pred %s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sq = moment.defineLocale('sq', {\n months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem : function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Sot në] LT',\n nextDay : '[Nesër në] LT',\n nextWeek : 'dddd [në] LT',\n lastDay : '[Dje në] LT',\n lastWeek : 'dddd [e kaluar në] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'në %s',\n past : '%s më parë',\n s : 'disa sekonda',\n ss : '%d sekonda',\n m : 'një minutë',\n mm : '%d minuta',\n h : 'një orë',\n hh : '%d orë',\n d : 'një ditë',\n dd : '%d ditë',\n M : 'një muaj',\n MM : '%d muaj',\n y : 'një vit',\n yy : '%d vite'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pre %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay : '[јуче у] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : 'пре %s',\n s : 'неколико секунди',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'дан',\n dd : translator.translate,\n M : 'месец',\n MM : translator.translate,\n y : 'годину',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ss = moment.defineLocale('ss', {\n months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Namuhla nga] LT',\n nextDay : '[Kusasa nga] LT',\n nextWeek : 'dddd [nga] LT',\n lastDay : '[Itolo nga] LT',\n lastWeek : 'dddd [leliphelile] [nga] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'nga %s',\n past : 'wenteka nga %s',\n s : 'emizuzwana lomcane',\n ss : '%d mzuzwana',\n m : 'umzuzu',\n mm : '%d emizuzu',\n h : 'lihora',\n hh : '%d emahora',\n d : 'lilanga',\n dd : '%d emalanga',\n M : 'inyanga',\n MM : '%d tinyanga',\n y : 'umnyaka',\n yy : '%d iminyaka'\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : '%d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sv = moment.defineLocale('sv', {\n months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'för %s sedan',\n s : 'några sekunder',\n ss : '%d sekunder',\n m : 'en minut',\n mm : '%d minuter',\n h : 'en timme',\n hh : '%d timmar',\n d : 'en dag',\n dd : '%d dagar',\n M : 'en månad',\n MM : '%d månader',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'e' :\n (b === 1) ? 'a' :\n (b === 2) ? 'a' :\n (b === 3) ? 'e' : 'e';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sw = moment.defineLocale('sw', {\n months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[leo saa] LT',\n nextDay : '[kesho saa] LT',\n nextWeek : '[wiki ijayo] dddd [saat] LT',\n lastDay : '[jana] LT',\n lastWeek : '[wiki iliyopita] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s baadaye',\n past : 'tokea %s',\n s : 'hivi punde',\n ss : 'sekunde %d',\n m : 'dakika moja',\n mm : 'dakika %d',\n h : 'saa limoja',\n hh : 'masaa %d',\n d : 'siku moja',\n dd : 'masiku %d',\n M : 'mwezi mmoja',\n MM : 'miezi %d',\n y : 'mwaka mmoja',\n yy : 'miaka %d'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '௧',\n '2': '௨',\n '3': '௩',\n '4': '௪',\n '5': '௫',\n '6': '௬',\n '7': '௭',\n '8': '௮',\n '9': '௯',\n '0': '௦'\n }, numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0'\n };\n\n var ta = moment.defineLocale('ta', {\n months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, HH:mm',\n LLLL : 'dddd, D MMMM YYYY, HH:mm'\n },\n calendar : {\n sameDay : '[இன்று] LT',\n nextDay : '[நாளை] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[நேற்று] LT',\n lastWeek : '[கடந்த வாரம்] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s இல்',\n past : '%s முன்',\n s : 'ஒரு சில விநாடிகள்',\n ss : '%d விநாடிகள்',\n m : 'ஒரு நிமிடம்',\n mm : '%d நிமிடங்கள்',\n h : 'ஒரு மணி நேரம்',\n hh : '%d மணி நேரம்',\n d : 'ஒரு நாள்',\n dd : '%d நாட்கள்',\n M : 'ஒரு மாதம்',\n MM : '%d மாதங்கள்',\n y : 'ஒரு வருடம்',\n yy : '%d ஆண்டுகள்'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal : function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem : function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var te = moment.defineLocale('te', {\n months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[నేడు] LT',\n nextDay : '[రేపు] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[నిన్న] LT',\n lastWeek : '[గత] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s లో',\n past : '%s క్రితం',\n s : 'కొన్ని క్షణాలు',\n ss : '%d సెకన్లు',\n m : 'ఒక నిమిషం',\n mm : '%d నిమిషాలు',\n h : 'ఒక గంట',\n hh : '%d గంటలు',\n d : 'ఒక రోజు',\n dd : '%d రోజులు',\n M : 'ఒక నెల',\n MM : '%d నెలలు',\n y : 'ఒక సంవత్సరం',\n yy : '%d సంవత్సరాలు'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n ordinal : '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tet = moment.defineLocale('tet', {\n months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'iha %s',\n past : '%s liuba',\n s : 'minutu balun',\n ss : 'minutu %d',\n m : 'minutu ida',\n mm : 'minutu %d',\n h : 'oras ida',\n hh : 'oras %d',\n d : 'loron ida',\n dd : 'loron %d',\n M : 'fulan ida',\n MM : 'fulan %d',\n y : 'tinan ida',\n yy : 'tinan %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум'\n };\n\n var tg = moment.defineLocale('tg', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Имрӯз соати] LT',\n nextDay : '[Пагоҳ соати] LT',\n lastDay : '[Дирӯз соати] LT',\n nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'баъди %s',\n past : '%s пеш',\n s : 'якчанд сония',\n m : 'як дақиқа',\n mm : '%d дақиқа',\n h : 'як соат',\n hh : '%d соат',\n d : 'як рӯз',\n dd : '%d рӯз',\n M : 'як моҳ',\n MM : '%d моҳ',\n y : 'як сол',\n yy : '%d сол'\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1th is the first week of the year.\n }\n });\n\n return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var th = moment.defineLocale('th', {\n months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n monthsParseExact: true,\n weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY เวลา H:mm',\n LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar : {\n sameDay : '[วันนี้ เวลา] LT',\n nextDay : '[พรุ่งนี้ เวลา] LT',\n nextWeek : 'dddd[หน้า เวลา] LT',\n lastDay : '[เมื่อวานนี้ เวลา] LT',\n lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'อีก %s',\n past : '%sที่แล้ว',\n s : 'ไม่กี่วินาที',\n ss : '%d วินาที',\n m : '1 นาที',\n mm : '%d นาที',\n h : '1 ชั่วโมง',\n hh : '%d ชั่วโมง',\n d : '1 วัน',\n dd : '%d วัน',\n M : '1 เดือน',\n MM : '%d เดือน',\n y : '1 ปี',\n yy : '%d ปี'\n }\n });\n\n return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tlPh = moment.defineLocale('tl-ph', {\n months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'MM/D/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY HH:mm',\n LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n },\n calendar : {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'sa loob ng %s',\n past : '%s ang nakalipas',\n s : 'ilang segundo',\n ss : '%d segundo',\n m : 'isang minuto',\n mm : '%d minuto',\n h : 'isang oras',\n hh : '%d oras',\n d : 'isang araw',\n dd : '%d araw',\n M : 'isang buwan',\n MM : '%d buwan',\n y : 'isang taon',\n yy : '%d taon'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'leS' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'waQ' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'nem' :\n time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'Hu’' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'wen' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'ben' :\n time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n }\n return (word === '') ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n monthsParseExact : true,\n weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L'\n },\n relativeTime : {\n future : translateFuture,\n past : translatePast,\n s : 'puS lup',\n ss : translate,\n m : 'wa’ tup',\n mm : translate,\n h : 'wa’ rep',\n hh : translate,\n d : 'wa’ jaj',\n dd : translate,\n M : 'wa’ jar',\n MM : translate,\n y : 'wa’ DIS',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlh;\n\n})));\n","\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n var suffixes = {\n 1: '\\'inci',\n 5: '\\'inci',\n 8: '\\'inci',\n 70: '\\'inci',\n 80: '\\'inci',\n 2: '\\'nci',\n 7: '\\'nci',\n 20: '\\'nci',\n 50: '\\'nci',\n 3: '\\'üncü',\n 4: '\\'üncü',\n 100: '\\'üncü',\n 6: '\\'ncı',\n 9: '\\'uncu',\n 10: '\\'uncu',\n 30: '\\'uncu',\n 60: '\\'ıncı',\n 90: '\\'ıncı'\n };\n\n var tr = moment.defineLocale('tr', {\n months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[yarın saat] LT',\n nextWeek : '[gelecek] dddd [saat] LT',\n lastDay : '[dün] LT',\n lastWeek : '[geçen] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s önce',\n s : 'birkaç saniye',\n ss : '%d saniye',\n m : 'bir dakika',\n mm : '%d dakika',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir yıl',\n yy : '%d yıl'\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) { // special case for zero\n return number + '\\'ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM [dallas] YYYY',\n LLL : 'D. MMMM [dallas] YYYY HH.mm',\n LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM : function (input) {\n return 'd\\'o' === input.toLowerCase();\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'd\\'o' : 'D\\'O';\n } else {\n return isLower ? 'd\\'a' : 'D\\'A';\n }\n },\n calendar : {\n sameDay : '[oxhi à] LT',\n nextDay : '[demà à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[ieiri à] LT',\n lastWeek : '[sür el] dddd [lasteu à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'osprei %s',\n past : 'ja%s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['viensas secunds', '\\'iensas secunds'],\n 'ss': [number + ' secunds', '' + number + ' secunds'],\n 'm': ['\\'n míut', '\\'iens míut'],\n 'mm': [number + ' míuts', '' + number + ' míuts'],\n 'h': ['\\'n þora', '\\'iensa þora'],\n 'hh': [number + ' þoras', '' + number + ' þoras'],\n 'd': ['\\'n ziua', '\\'iensa ziua'],\n 'dd': [number + ' ziuas', '' + number + ' ziuas'],\n 'M': ['\\'n mes', '\\'iens mes'],\n 'MM': [number + ' mesen', '' + number + ' mesen'],\n 'y': ['\\'n ar', '\\'iens ar'],\n 'yy': [number + ' ars', '' + number + ' ars']\n };\n return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzm = moment.defineLocale('tzm', {\n months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past : 'ⵢⴰⵏ %s',\n s : 'ⵉⵎⵉⴽ',\n ss : '%d ⵉⵎⵉⴽ',\n m : 'ⵎⵉⵏⵓⴺ',\n mm : '%d ⵎⵉⵏⵓⴺ',\n h : 'ⵙⴰⵄⴰ',\n hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d : 'ⴰⵙⵙ',\n dd : '%d oⵙⵙⴰⵏ',\n M : 'ⴰⵢoⵓⵔ',\n MM : '%d ⵉⵢⵢⵉⵔⵏ',\n y : 'ⴰⵙⴳⴰⵙ',\n yy : '%d ⵉⵙⴳⴰⵙⵏ'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzmLatn = moment.defineLocale('tzm-latn', {\n months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dadkh s yan %s',\n past : 'yan %s',\n s : 'imik',\n ss : '%d imik',\n m : 'minuḍ',\n mm : '%d minuḍ',\n h : 'saɛa',\n hh : '%d tassaɛin',\n d : 'ass',\n dd : '%d ossan',\n M : 'ayowr',\n MM : '%d iyyirn',\n y : 'asgas',\n yy : '%d isgasn'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل'\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n 'dd': 'день_дні_днів',\n 'MM': 'місяць_місяці_місяців',\n 'yy': 'рік_роки_років'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n };\n\n if (m === true) {\n return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n 'accusative' :\n ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n 'genitive' :\n 'nominative');\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months : {\n 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n },\n monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY р.',\n LLL : 'D MMMM YYYY р., HH:mm',\n LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n },\n calendar : {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : '%s тому',\n s : 'декілька секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'годину',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'місяць',\n MM : relativeTimeWithPlural,\n y : 'рік',\n yy : relativeTimeWithPlural\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر'\n ];\n var days = [\n 'اتوار',\n 'پیر',\n 'منگل',\n 'بدھ',\n 'جمعرات',\n 'جمعہ',\n 'ہفتہ'\n ];\n\n var ur = moment.defineLocale('ur', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[آج بوقت] LT',\n nextDay : '[کل بوقت] LT',\n nextWeek : 'dddd [بوقت] LT',\n lastDay : '[گذشتہ روز بوقت] LT',\n lastWeek : '[گذشتہ] dddd [بوقت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s بعد',\n past : '%s قبل',\n s : 'چند سیکنڈ',\n ss : '%d سیکنڈ',\n m : 'ایک منٹ',\n mm : '%d منٹ',\n h : 'ایک گھنٹہ',\n hh : '%d گھنٹے',\n d : 'ایک دن',\n dd : '%d دن',\n M : 'ایک ماہ',\n MM : '%d ماہ',\n y : 'ایک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uz = moment.defineLocale('uz', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Бугун соат] LT [да]',\n nextDay : '[Эртага] LT [да]',\n nextWeek : 'dddd [куни соат] LT [да]',\n lastDay : '[Кеча соат] LT [да]',\n lastWeek : '[Утган] dddd [куни соат] LT [да]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Якин %s ичида',\n past : 'Бир неча %s олдин',\n s : 'фурсат',\n ss : '%d фурсат',\n m : 'бир дакика',\n mm : '%d дакика',\n h : 'бир соат',\n hh : '%d соат',\n d : 'бир кун',\n dd : '%d кун',\n M : 'бир ой',\n MM : '%d ой',\n y : 'бир йил',\n yy : '%d йил'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Bugun soat] LT [da]',\n nextDay : '[Ertaga] LT [da]',\n nextWeek : 'dddd [kuni soat] LT [da]',\n lastDay : '[Kecha soat] LT [da]',\n lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Yaqin %s ichida',\n past : 'Bir necha %s oldin',\n s : 'soniya',\n ss : '%d soniya',\n m : 'bir daqiqa',\n mm : '%d daqiqa',\n h : 'bir soat',\n hh : '%d soat',\n d : 'bir kun',\n dd : '%d kun',\n M : 'bir oy',\n MM : '%d oy',\n y : 'bir yil',\n yy : '%d yil'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var vi = moment.defineLocale('vi', {\n months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n monthsParseExact : true,\n weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /sa|ch/i,\n isPM : function (input) {\n return /^ch$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [năm] YYYY',\n LLL : 'D MMMM [năm] YYYY HH:mm',\n LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n l : 'DD/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần rồi lúc] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s tới',\n past : '%s trước',\n s : 'vài giây',\n ss : '%d giây' ,\n m : 'một phút',\n mm : '%d phút',\n h : 'một giờ',\n hh : '%d giờ',\n d : 'một ngày',\n dd : '%d ngày',\n M : 'một tháng',\n MM : '%d tháng',\n y : 'một năm',\n yy : '%d năm'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n monthsParseExact : true,\n weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[T~ódá~ý át] LT',\n nextDay : '[T~ómó~rró~w át] LT',\n nextWeek : 'dddd [át] LT',\n lastDay : '[Ý~ést~érdá~ý át] LT',\n lastWeek : '[L~ást] dddd [át] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'í~ñ %s',\n past : '%s á~gó',\n s : 'á ~féw ~sécó~ñds',\n ss : '%d s~écóñ~ds',\n m : 'á ~míñ~úté',\n mm : '%d m~íñú~tés',\n h : 'á~ñ hó~úr',\n hh : '%d h~óúrs',\n d : 'á ~dáý',\n dd : '%d d~áýs',\n M : 'á ~móñ~th',\n MM : '%d m~óñt~hs',\n y : 'á ~ýéár',\n yy : '%d ý~éárs'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var yo = moment.defineLocale('yo', {\n months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Ònì ni] LT',\n nextDay : '[Ọ̀la ni] LT',\n nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n lastDay : '[Àna ni] LT',\n lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ní %s',\n past : '%s kọjá',\n s : 'ìsẹjú aayá die',\n ss :'aayá %d',\n m : 'ìsẹjú kan',\n mm : 'ìsẹjú %d',\n h : 'wákati kan',\n hh : 'wákati %d',\n d : 'ọjọ́ kan',\n dd : 'ọjọ́ %d',\n M : 'osù kan',\n MM : 'osù %d',\n y : 'ọdún kan',\n yy : 'ọdún %d'\n },\n dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n ordinal : 'ọjọ́ %d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhCn = moment.defineLocale('zh-cn', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日Ah点mm分',\n LLLL : 'YYYY年M月D日ddddAh点mm分',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' ||\n meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s内',\n past : '%s前',\n s : '几秒',\n ss : '%d 秒',\n m : '1 分钟',\n mm : '%d 分钟',\n h : '1 小时',\n hh : '%d 小时',\n d : '1 天',\n dd : '%d 天',\n M : '1 个月',\n MM : '%d 个月',\n y : '1 年',\n yy : '%d 年'\n },\n week : {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhHk = moment.defineLocale('zh-hk', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhTw = moment.defineLocale('zh-tw', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天] LT',\n nextDay : '[明天] LT',\n nextWeek : '[下]dddd LT',\n lastDay : '[昨天] LT',\n lastWeek : '[上]dddd LT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhTw;\n\n})));\n","/* global Backbone, Handlebars, Promise, _ */\n\n/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery';\nimport {Collection, Model, View} from 'backbone';\n\nimport OC from './index';\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function () {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true);\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true);\n\t\t\tthis.set('secondAction', this.get('actions')[0]);\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true);\n\t\t}\n\t}\n});\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n});\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis._collection = options.collection;\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function () {\n\t\tvar self = this;\n\t\tself.$el.html('');\n\t\tself._subViews = [];\n\n\t\tself._collection.forEach(function (contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t});\n\t\t\titem.render();\n\t\t\tself.$el.append(item.$el);\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self);\n\t\t\tself._subViews.push(item);\n\t\t});\n\n\t\treturn self;\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function ($src) {\n\t\tthis._subViews.forEach(function (view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src);\n\t\t});\n\t}\n});\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function (data) {\n\t\treturn this.contactTemplate(data);\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis._model = options.model;\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this);\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function () {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}));\n\t\tthis.delegateEvents();\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'));\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({placement: 'left'});\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({placement: 'left'});\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function () {\n\t\tthis._actionMenuShown = !this._actionMenuShown;\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show();\n\t\t} else {\n\t\t\tthis.$('.menu').hide();\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el);\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function ($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn;\n\t\t}\n\t\tthis._actionMenuShown = false;\n\t\tthis.$('.menu').hide();\n\t}\n});\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function (e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val();\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val());\n\t\t\tthis._searchTerm = searchTerm;\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function (data) {\n\t\treturn this.templates.loading(data);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function (data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function (data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function (data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis.options = options;\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function (text) {\n\t\tthis.render();\n\t\tthis._contacts = undefined;\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}));\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function () {\n\t\tthis.render();\n\t\tthis._contacts = undefined;\n\t\tthis.$('.content').html(this.errorTemplate());\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function (viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts;\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t});\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t});\n\t\tlist.render();\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}));\n\t\tthis.$('#contactsmenu-contacts').html(list.$el);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function (data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val();\n\t\tthis.$el.html(this.contentTemplate(data));\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal);\n\t\tthis.$('#contactsmenu-search').focus();\n\t\treturn this;\n\t}\n\n});\n\n/**\n * @param {Object} options\n * @param {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function (options) {\n\tthis.initialize(options);\n};\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis.$el = options.el;\n\t\tthis._$trigger = options.trigger;\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t});\n\t\tthis._view.on('search', function (searchTerm) {\n\t\t\tthis._loadContacts(searchTerm);\n\t\t}, this);\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function () {\n\t\t\tthis._toggleVisibility(true);\n\t\t}.bind(this), true);\n\t\tthis.$el.on('beforeHide', function () {\n\t\t\tthis._toggleVisibility(false);\n\t\t}.bind(this));\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function (show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts();\n\t\t} else {\n\t\t\tthis.$el.html('');\n\t\t\treturn Promise.resolve();\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function (searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts');\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}));\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\t_loadContacts: function (searchTerm) {\n\t\tvar self = this;\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm);\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'));\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}));\n\t\t}\n\t\treturn self._contactsPromise.then(function (data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts);\n\n\t\t\tself._view.showContacts(data, searchTerm);\n\t\t}, function (e) {\n\t\t\tself._view.showError();\n\t\t\tconsole.error('There was an error loading your contacts', e);\n\t\t}).then(function () {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise;\n\t\t}).catch(console.error.bind(this));\n\t}\n};\n\nexport default ContactsMenu;\n","/*!\n * Toastify js 1.6.1\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */\n(function(root, factory) {\n if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Toastify = factory();\n }\n})(this, function(global) {\n // Object initialization\n var Toastify = function(options) {\n // Returning a new init object\n return new Toastify.lib.init(options);\n },\n // Library version\n version = \"1.6.1\";\n\n // Defining the prototype of the object\n Toastify.lib = Toastify.prototype = {\n toastify: version,\n\n constructor: Toastify,\n\n // Initializing the object with required parameters\n init: function(options) {\n // Verifying and validating the input object\n if (!options) {\n options = {};\n }\n\n // Creating the options object\n this.options = {};\n\n this.toastElement = null;\n\n // Validating the options\n this.options.text = options.text || \"Hi there!\"; // Display message\n this.options.duration = options.duration || 3000; // Display duration\n this.options.selector = options.selector; // Parent selector\n this.options.callback = options.callback || function() {}; // Callback after display\n this.options.destination = options.destination; // On-click destination\n this.options.newWindow = options.newWindow || false; // Open destination in new window\n this.options.close = options.close || false; // Show toast close icon\n this.options.gravity = options.gravity == \"bottom\" ? \"toastify-bottom\" : \"toastify-top\"; // toast position - top or bottom\n this.options.positionLeft = options.positionLeft || false; // toast position - left or right\n this.options.position = options.position || ''; // toast position - left or right\n this.options.backgroundColor = options.backgroundColor; // toast background color\n this.options.avatar = options.avatar || \"\"; // img element src - url or a path\n this.options.className = options.className || \"\"; // additional class names for the toast\n this.options.stopOnFocus = options.stopOnFocus === undefined? true: options.stopOnFocus; // stop timeout on focus\n\n // Returning the current object for chaining functions\n return this;\n },\n\n // Building the DOM element\n buildToast: function() {\n // Validating if the options are defined\n if (!this.options) {\n throw \"Toastify is not initialized\";\n }\n\n // Creating the DOM object\n var divElement = document.createElement(\"div\");\n divElement.className = \"toastify on \" + this.options.className;\n\n // Positioning toast to left or right or center\n if (!!this.options.position) {\n divElement.className += \" toastify-\" + this.options.position;\n } else {\n // To be depreciated in further versions\n if (this.options.positionLeft === true) {\n divElement.className += \" toastify-left\";\n console.warn('Property `positionLeft` will be depreciated in further versions. Please use `position` instead.')\n } else {\n // Default position\n divElement.className += \" toastify-right\";\n }\n }\n\n // Assigning gravity of element\n divElement.className += \" \" + this.options.gravity;\n\n if (this.options.backgroundColor) {\n divElement.style.background = this.options.backgroundColor;\n }\n\n // Adding the toast message\n divElement.innerHTML = this.options.text;\n\n if (this.options.avatar !== \"\") {\n var avatarElement = document.createElement(\"img\");\n avatarElement.src = this.options.avatar;\n\n avatarElement.className = \"toastify-avatar\";\n\n if (this.options.position == \"left\" || this.options.positionLeft === true) {\n // Adding close icon on the left of content\n divElement.appendChild(avatarElement);\n } else {\n // Adding close icon on the right of content\n divElement.insertAdjacentElement(\"beforeend\", avatarElement);\n }\n }\n\n // Adding a close icon to the toast\n if (this.options.close === true) {\n // Create a span for close element\n var closeElement = document.createElement(\"span\");\n closeElement.innerHTML = \"✖\";\n\n closeElement.className = \"toast-close\";\n\n // Triggering the removal of toast from DOM on close click\n closeElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n this.removeElement(event.target.parentElement);\n window.clearTimeout(event.target.parentElement.timeOutValue);\n }.bind(this)\n );\n\n // Clear timeout while toast is focused\n if (this.options.stopOnFocus && this.options.duration > 0) {\n const self = this;\n // stop countdown\n divElement.addEventListener(\n \"mouseover\",\n function(event) {\n window.clearTimeout(divElement.timeOutValue);\n }\n )\n // add back the timeout\n divElement.addEventListener(\n \"mouseleave\",\n function() {\n divElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n self.removeElement(divElement);\n },\n self.options.duration\n )\n }\n )\n }\n\n //Calculating screen width\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Adding the close icon to the toast element\n // Display on the right if screen width is less than or equal to 360px\n if ((this.options.position == \"left\" || this.options.positionLeft === true) && width > 360) {\n // Adding close icon on the left of content\n divElement.insertAdjacentElement(\"afterbegin\", closeElement);\n } else {\n // Adding close icon on the right of content\n divElement.appendChild(closeElement);\n }\n }\n\n // Adding an on-click destination path\n if (typeof this.options.destination !== \"undefined\") {\n divElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n if (this.options.newWindow === true) {\n window.open(this.options.destination, \"_blank\");\n } else {\n window.location = this.options.destination;\n }\n }.bind(this)\n );\n }\n\n // Returning the generated element\n return divElement;\n },\n\n // Displaying the toast\n showToast: function() {\n // Creating the DOM object for the toast\n this.toastElement = this.buildToast();\n\n // Getting the root element to with the toast needs to be added\n var rootElement;\n if (typeof this.options.selector === \"undefined\") {\n rootElement = document.body;\n } else {\n rootElement = document.getElementById(this.options.selector);\n }\n\n // Validating if root element is present in DOM\n if (!rootElement) {\n throw \"Root element is not defined\";\n }\n\n // Adding the DOM element\n rootElement.insertBefore(this.toastElement, rootElement.firstChild);\n\n // Repositioning the toasts in case multiple toasts are present\n Toastify.reposition();\n\n if (this.options.duration > 0) {\n this.toastElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n this.removeElement(this.toastElement);\n }.bind(this),\n this.options.duration\n ); // Binding `this` for function invocation\n }\n\n // Supporting function chaining\n return this;\n },\n\n hideToast: function() {\n if (this.toastElement.timeOutValue) {\n clearTimeout(this.toastElement.timeOutValue);\n }\n this.removeElement(this.toastElement);\n },\n\n // Removing the element from the DOM\n removeElement: function(toastElement) {\n // Hiding the element\n // toastElement.classList.remove(\"on\");\n toastElement.className = toastElement.className.replace(\" on\", \"\");\n\n // Removing the element from DOM after transition end\n window.setTimeout(\n function() {\n // Remove the elemenf from the DOM\n toastElement.parentNode.removeChild(toastElement);\n\n // Calling the callback function\n this.options.callback.call(toastElement);\n\n // Repositioning the toasts again\n Toastify.reposition();\n }.bind(this),\n 400\n ); // Binding `this` for function invocation\n },\n };\n\n // Positioning the toasts on the DOM\n Toastify.reposition = function() {\n // Top margins with gravity\n var topLeftOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var topRightOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var offsetSize = {\n top: 15,\n bottom: 15,\n };\n\n // Get all toast messages on the DOM\n var allToasts = document.getElementsByClassName(\"toastify\");\n\n var classUsed;\n\n // Modifying the position of each toast element\n for (var i = 0; i < allToasts.length; i++) {\n // Getting the applied gravity\n if (containsClass(allToasts[i], \"toastify-top\") === true) {\n classUsed = \"toastify-top\";\n } else {\n classUsed = \"toastify-bottom\";\n }\n\n var height = allToasts[i].offsetHeight;\n classUsed = classUsed.substr(9, classUsed.length-1)\n // Spacing between toasts\n var offset = 15;\n\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Show toast in center if screen with less than or qual to 360px\n if (width <= 360) {\n // Setting the position\n allToasts[i].style[classUsed] = offsetSize[classUsed] + \"px\";\n\n offsetSize[classUsed] += height + offset;\n } else {\n if (containsClass(allToasts[i], \"toastify-left\") === true) {\n // Setting the position\n allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + \"px\";\n\n topLeftOffsetSize[classUsed] += height + offset;\n } else {\n // Setting the position\n allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + \"px\";\n\n topRightOffsetSize[classUsed] += height + offset;\n }\n }\n }\n\n // Supporting function chaining\n return this;\n };\n\n function containsClass(elem, yourClass) {\n if (!elem || typeof yourClass !== \"string\") {\n return false;\n } else if (\n elem.className &&\n elem.className\n .trim()\n .split(/\\s+/gi)\n .indexOf(yourClass) > -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n // Setting up the prototype for the init object\n Toastify.lib.init.prototype = Toastify.lib;\n\n // Returning the Toastify function to be assigned to the window object/module\n return Toastify;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar axios_1 = require(\"axios\");\nvar client = axios_1.default.create({\n headers: {\n requesttoken: OC.requestToken\n }\n});\nexports.default = client;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"<div class=\\\"avatar\\\"></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.hyperlink : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.icon : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.hyperlink : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.icon : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<span class=\\\"other-actions icon-more\\\"></span>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.actions : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = helpers.hyperlink || (depth0 != null ? depth0.hyperlink : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = helpers.icon || (depth0 != null ? depth0.icon : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"<div class=\\\"body\\\">\\n\t<div class=\\\"full-name\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.fullName : stack1), depth0))\n + \"</div>\\n\t<div class=\\\"last-message\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.lastMessage : stack1), depth0))\n + \"</div>\\n</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.hasTwoActions : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.hasManyActions : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7eUNBQXVDLGdDQUFnQzs7OzsyQkFDOUMsZ0JBQWdCOzs7O29DQUNQLDBCQUEwQjs7Ozt5QkFDckMsY0FBYzs7OzswQkFDYixlQUFlOzs7OzZCQUNaLGtCQUFrQjs7OzsyQkFDcEIsZ0JBQWdCOzs7O0FBRWxDLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO0FBQy9DLHlDQUEyQixRQUFRLENBQUMsQ0FBQztBQUNyQywyQkFBYSxRQUFRLENBQUMsQ0FBQztBQUN2QixvQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFDaEMseUJBQVcsUUFBUSxDQUFDLENBQUM7QUFDckIsMEJBQVksUUFBUSxDQUFDLENBQUM7QUFDdEIsNkJBQWUsUUFBUSxDQUFDLENBQUM7QUFDekIsMkJBQWEsUUFBUSxDQUFDLENBQUM7Q0FDeEIiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVyRWFjaCBmcm9tICcuL2hlbHBlcnMvZWFjaCc7XG5pbXBvcnQgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJJZiBmcm9tICcuL2hlbHBlcnMvaWYnO1xuaW1wb3J0IHJlZ2lzdGVyTG9nIGZyb20gJy4vaGVscGVycy9sb2cnO1xuaW1wb3J0IHJlZ2lzdGVyTG9va3VwIGZyb20gJy4vaGVscGVycy9sb29rdXAnO1xuaW1wb3J0IHJlZ2lzdGVyV2l0aCBmcm9tICcuL2hlbHBlcnMvd2l0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJFYWNoKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJJZihpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb29rdXAoaW5zdGFuY2UpO1xuICByZWdpc3RlcldpdGgoaW5zdGFuY2UpO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else {\n var priorKey = undefined;\n\n for (var key in context) {\n if (context.hasOwnProperty(key)) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n }\n }\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field) {\n if (!obj) {\n return obj;\n }\n if (field === 'constructor' && !obj.propertyIsEnumerable(field)) {\n return undefined;\n }\n return obj[field];\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixhQUFPLEdBQUcsQ0FBQztLQUNaO0FBQ0QsUUFBSSxLQUFLLEtBQUssYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9ELGFBQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0QsV0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDbkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9va3VwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uKG9iaiwgZmllbGQpIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgaWYgKGZpZWxkID09PSAnY29uc3RydWN0b3InICYmICFvYmoucHJvcGVydHlJc0VudW1lcmFibGUoZmllbGQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n if (!console[method]) {\n // eslint-disable-line no-console\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision !== currentRevision) {\n if (compilerRevision < currentRevision) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n var result = env.VM.invokePartial.call(this, partial, context, options);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, options);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name) {\n if (!(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj);\n }\n return obj[name];\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n if (depths[i] && depths[i][name] != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n merge: function merge(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n container.helpers = container.merge(options.helpers, env.helpers);\n\n if (templateSpec.usePartial) {\n container.partials = container.merge(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = container.merge(options.decorators, env.decorators);\n }\n } else {\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQzhCLFFBQVE7O0FBRWxFLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUN2RCxlQUFlLDBCQUFvQixDQUFDOztBQUUxQyxNQUFJLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLGdCQUFnQixHQUFHLGVBQWUsRUFBRTtBQUN0QyxVQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1VBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFlBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNoSyxNQUFNOztBQUVMLFlBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNuRjtHQUNGO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcs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SSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTLCBjcmVhdGVGcmFtZSB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICBjb25zdCBjb21waWxlclJldmlzaW9uID0gY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSB8fCAxLFxuICAgICAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7XG4gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVyUmV2aXNpb25dO1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGVwdGhzW2ldICYmIGRlcHRoc1tpXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIChwYXJhbSAhPT0gY29tbW9uKSkge1xuICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgLy8gQW4gZW1wdHkgb2JqZWN0IHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgbnVsbC1jb250ZXh0c1xuICAgIG51bGxDb250ZXh0OiBPYmplY3Quc2VhbCh7fSksXG5cbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlclxuICB9O1xuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcblxuICAgIHJldC5fc2V0dXAob3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwgJiYgdGVtcGxhdGVTcGVjLnVzZURhdGEpIHtcbiAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgbGV0IGRlcHRocyxcbiAgICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9IGNvbnRleHQgIT0gb3B0aW9ucy5kZXB0aHNbMF0gPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKSA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dC8qLCBvcHRpb25zKi8pIHtcbiAgICAgIHJldHVybiAnJyArIHRlbXBsYXRlU3BlYy5tYWluKGNvbnRhaW5lciwgY29udGV4dCwgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscywgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgfVxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyh0ZW1wbGF0ZVNwZWMubWFpbiwgbWFpbiwgY29udGFpbmVyLCBvcHRpb25zLmRlcHRocyB8fCBbXSwgZGF0YSwgYmxvY2tQYXJhbXMpO1xuICAgIHJldHVybiBtYWluKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5oZWxwZXJzLCBlbnYuaGVscGVycyk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCkge1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5wYXJ0aWFscywgZW52LnBhcnRpYWxzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmRlY29yYXRvcnMsIGVudi5kZWNvcmF0b3JzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7XG4gICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBvcHRpb25zLmRlY29yYXRvcnM7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCB0ZW1wbGF0ZVNwZWNbaV0sIGRhdGEsIDAsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICBmdW5jdGlvbiBwcm9nKGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjdXJyZW50RGVwdGhzID0gZGVwdGhzO1xuICAgIGlmIChkZXB0aHMgJiYgY29udGV4dCAhPSBkZXB0aHNbMF0gJiYgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbi8qKlxuICogVGhpcyBpcyBjdXJyZW50bHkgcGFydCBvZiB0aGUgb2ZmaWNpYWwgQVBJLCB0aGVyZWZvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBzaG91bGQgbm90IGJlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAvLyBVc2UgdGhlIGN1cnJlbnQgY2xvc3VyZSBjb250ZXh0IHRvIHNhdmUgdGhlIHBhcnRpYWwtYmxvY2sgaWYgdGhpcyBwYXJ0aWFsXG4gIGNvbnN0IGN1cnJlbnRQYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gIGlmIChvcHRpb25zLmlkcykge1xuICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIGxldCBwYXJ0aWFsQmxvY2s7XG4gIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3ApIHtcbiAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIC8vIFdyYXBwZXIgZnVuY3Rpb24gdG8gZ2V0IGFjY2VzcyB0byBjdXJyZW50UGFydGlhbEJsb2NrIGZyb20gdGhlIGNsb3N1cmVcbiAgICBsZXQgZm4gPSBvcHRpb25zLmZuO1xuICAgIHBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gZnVuY3Rpb24gcGFydGlhbEJsb2NrV3JhcHBlcihjb250ZXh0LCBvcHRpb25zID0ge30pIHtcblxuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkgeyByZXR1cm4gJyc7IH1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihwcm9nLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aHMgJiYgZGVwdGhzWzBdLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuIl19\n","/* global window */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.loadingText || (depth0 != null ? depth0.loadingText : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.couldNotLoadText || (depth0 != null ? depth0.couldNotLoadText : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = helpers.searchContactsText || (depth0 != null ? depth0.searchContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.searchContactsText || (depth0 != null ? depth0.searchContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.searchTerm || (depth0 != null ? depth0.searchTerm : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.noContactsFoundText || (depth0 != null ? depth0.noContactsFoundText : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = helpers.contactsAppURL || (depth0 != null ? depth0.contactsAppURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.showAllContactsText || (depth0 != null ? depth0.showAllContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.canInstallApp : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = helpers.contactsAppMgmtURL || (depth0 != null ? depth0.contactsAppMgmtURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.contactsAppMgmtText || (depth0 != null ? depth0.contactsAppMgmtText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.contacts : depth0)) != null ? stack1.length : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.contactsAppEnabled : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});","var map = {\n\t\"./af\": 53,\n\t\"./af.js\": 53,\n\t\"./ar\": 54,\n\t\"./ar-dz\": 55,\n\t\"./ar-dz.js\": 55,\n\t\"./ar-kw\": 56,\n\t\"./ar-kw.js\": 56,\n\t\"./ar-ly\": 57,\n\t\"./ar-ly.js\": 57,\n\t\"./ar-ma\": 58,\n\t\"./ar-ma.js\": 58,\n\t\"./ar-sa\": 59,\n\t\"./ar-sa.js\": 59,\n\t\"./ar-tn\": 60,\n\t\"./ar-tn.js\": 60,\n\t\"./ar.js\": 54,\n\t\"./az\": 61,\n\t\"./az.js\": 61,\n\t\"./be\": 62,\n\t\"./be.js\": 62,\n\t\"./bg\": 63,\n\t\"./bg.js\": 63,\n\t\"./bm\": 64,\n\t\"./bm.js\": 64,\n\t\"./bn\": 65,\n\t\"./bn.js\": 65,\n\t\"./bo\": 66,\n\t\"./bo.js\": 66,\n\t\"./br\": 67,\n\t\"./br.js\": 67,\n\t\"./bs\": 68,\n\t\"./bs.js\": 68,\n\t\"./ca\": 69,\n\t\"./ca.js\": 69,\n\t\"./cs\": 70,\n\t\"./cs.js\": 70,\n\t\"./cv\": 71,\n\t\"./cv.js\": 71,\n\t\"./cy\": 72,\n\t\"./cy.js\": 72,\n\t\"./da\": 73,\n\t\"./da.js\": 73,\n\t\"./de\": 74,\n\t\"./de-at\": 75,\n\t\"./de-at.js\": 75,\n\t\"./de-ch\": 76,\n\t\"./de-ch.js\": 76,\n\t\"./de.js\": 74,\n\t\"./dv\": 77,\n\t\"./dv.js\": 77,\n\t\"./el\": 78,\n\t\"./el.js\": 78,\n\t\"./en-SG\": 79,\n\t\"./en-SG.js\": 79,\n\t\"./en-au\": 80,\n\t\"./en-au.js\": 80,\n\t\"./en-ca\": 81,\n\t\"./en-ca.js\": 81,\n\t\"./en-gb\": 82,\n\t\"./en-gb.js\": 82,\n\t\"./en-ie\": 83,\n\t\"./en-ie.js\": 83,\n\t\"./en-il\": 84,\n\t\"./en-il.js\": 84,\n\t\"./en-nz\": 85,\n\t\"./en-nz.js\": 85,\n\t\"./eo\": 86,\n\t\"./eo.js\": 86,\n\t\"./es\": 87,\n\t\"./es-do\": 88,\n\t\"./es-do.js\": 88,\n\t\"./es-us\": 89,\n\t\"./es-us.js\": 89,\n\t\"./es.js\": 87,\n\t\"./et\": 90,\n\t\"./et.js\": 90,\n\t\"./eu\": 91,\n\t\"./eu.js\": 91,\n\t\"./fa\": 92,\n\t\"./fa.js\": 92,\n\t\"./fi\": 93,\n\t\"./fi.js\": 93,\n\t\"./fo\": 94,\n\t\"./fo.js\": 94,\n\t\"./fr\": 95,\n\t\"./fr-ca\": 96,\n\t\"./fr-ca.js\": 96,\n\t\"./fr-ch\": 97,\n\t\"./fr-ch.js\": 97,\n\t\"./fr.js\": 95,\n\t\"./fy\": 98,\n\t\"./fy.js\": 98,\n\t\"./ga\": 99,\n\t\"./ga.js\": 99,\n\t\"./gd\": 100,\n\t\"./gd.js\": 100,\n\t\"./gl\": 101,\n\t\"./gl.js\": 101,\n\t\"./gom-latn\": 102,\n\t\"./gom-latn.js\": 102,\n\t\"./gu\": 103,\n\t\"./gu.js\": 103,\n\t\"./he\": 104,\n\t\"./he.js\": 104,\n\t\"./hi\": 105,\n\t\"./hi.js\": 105,\n\t\"./hr\": 106,\n\t\"./hr.js\": 106,\n\t\"./hu\": 107,\n\t\"./hu.js\": 107,\n\t\"./hy-am\": 108,\n\t\"./hy-am.js\": 108,\n\t\"./id\": 109,\n\t\"./id.js\": 109,\n\t\"./is\": 110,\n\t\"./is.js\": 110,\n\t\"./it\": 111,\n\t\"./it-ch\": 112,\n\t\"./it-ch.js\": 112,\n\t\"./it.js\": 111,\n\t\"./ja\": 113,\n\t\"./ja.js\": 113,\n\t\"./jv\": 114,\n\t\"./jv.js\": 114,\n\t\"./ka\": 115,\n\t\"./ka.js\": 115,\n\t\"./kk\": 116,\n\t\"./kk.js\": 116,\n\t\"./km\": 117,\n\t\"./km.js\": 117,\n\t\"./kn\": 118,\n\t\"./kn.js\": 118,\n\t\"./ko\": 119,\n\t\"./ko.js\": 119,\n\t\"./ku\": 120,\n\t\"./ku.js\": 120,\n\t\"./ky\": 121,\n\t\"./ky.js\": 121,\n\t\"./lb\": 122,\n\t\"./lb.js\": 122,\n\t\"./lo\": 123,\n\t\"./lo.js\": 123,\n\t\"./lt\": 124,\n\t\"./lt.js\": 124,\n\t\"./lv\": 125,\n\t\"./lv.js\": 125,\n\t\"./me\": 126,\n\t\"./me.js\": 126,\n\t\"./mi\": 127,\n\t\"./mi.js\": 127,\n\t\"./mk\": 128,\n\t\"./mk.js\": 128,\n\t\"./ml\": 129,\n\t\"./ml.js\": 129,\n\t\"./mn\": 130,\n\t\"./mn.js\": 130,\n\t\"./mr\": 131,\n\t\"./mr.js\": 131,\n\t\"./ms\": 132,\n\t\"./ms-my\": 133,\n\t\"./ms-my.js\": 133,\n\t\"./ms.js\": 132,\n\t\"./mt\": 134,\n\t\"./mt.js\": 134,\n\t\"./my\": 135,\n\t\"./my.js\": 135,\n\t\"./nb\": 136,\n\t\"./nb.js\": 136,\n\t\"./ne\": 137,\n\t\"./ne.js\": 137,\n\t\"./nl\": 138,\n\t\"./nl-be\": 139,\n\t\"./nl-be.js\": 139,\n\t\"./nl.js\": 138,\n\t\"./nn\": 140,\n\t\"./nn.js\": 140,\n\t\"./pa-in\": 141,\n\t\"./pa-in.js\": 141,\n\t\"./pl\": 142,\n\t\"./pl.js\": 142,\n\t\"./pt\": 143,\n\t\"./pt-br\": 144,\n\t\"./pt-br.js\": 144,\n\t\"./pt.js\": 143,\n\t\"./ro\": 145,\n\t\"./ro.js\": 145,\n\t\"./ru\": 146,\n\t\"./ru.js\": 146,\n\t\"./sd\": 147,\n\t\"./sd.js\": 147,\n\t\"./se\": 148,\n\t\"./se.js\": 148,\n\t\"./si\": 149,\n\t\"./si.js\": 149,\n\t\"./sk\": 150,\n\t\"./sk.js\": 150,\n\t\"./sl\": 151,\n\t\"./sl.js\": 151,\n\t\"./sq\": 152,\n\t\"./sq.js\": 152,\n\t\"./sr\": 153,\n\t\"./sr-cyrl\": 154,\n\t\"./sr-cyrl.js\": 154,\n\t\"./sr.js\": 153,\n\t\"./ss\": 155,\n\t\"./ss.js\": 155,\n\t\"./sv\": 156,\n\t\"./sv.js\": 156,\n\t\"./sw\": 157,\n\t\"./sw.js\": 157,\n\t\"./ta\": 158,\n\t\"./ta.js\": 158,\n\t\"./te\": 159,\n\t\"./te.js\": 159,\n\t\"./tet\": 160,\n\t\"./tet.js\": 160,\n\t\"./tg\": 161,\n\t\"./tg.js\": 161,\n\t\"./th\": 162,\n\t\"./th.js\": 162,\n\t\"./tl-ph\": 163,\n\t\"./tl-ph.js\": 163,\n\t\"./tlh\": 164,\n\t\"./tlh.js\": 164,\n\t\"./tr\": 165,\n\t\"./tr.js\": 165,\n\t\"./tzl\": 166,\n\t\"./tzl.js\": 166,\n\t\"./tzm\": 167,\n\t\"./tzm-latn\": 168,\n\t\"./tzm-latn.js\": 168,\n\t\"./tzm.js\": 167,\n\t\"./ug-cn\": 169,\n\t\"./ug-cn.js\": 169,\n\t\"./uk\": 170,\n\t\"./uk.js\": 170,\n\t\"./ur\": 171,\n\t\"./ur.js\": 171,\n\t\"./uz\": 172,\n\t\"./uz-latn\": 173,\n\t\"./uz-latn.js\": 173,\n\t\"./uz.js\": 172,\n\t\"./vi\": 174,\n\t\"./vi.js\": 174,\n\t\"./x-pseudo\": 175,\n\t\"./x-pseudo.js\": 175,\n\t\"./yo\": 176,\n\t\"./yo.js\": 176,\n\t\"./zh-cn\": 177,\n\t\"./zh-cn.js\": 177,\n\t\"./zh-hk\": 178,\n\t\"./zh-hk.js\": 178,\n\t\"./zh-tw\": 179,\n\t\"./zh-tw.js\": 179\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 221;","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n // Only Node.JS has a process variable that is of [[Class]] process\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach([\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n 'socketPath'\n ], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get';\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport Axios from 'nextcloud-axios'\n\nimport OC from './OC/index'\n\nconst url = `${OC.getRootPath()}/status.php`\n\nconst check = () => {\n\tconsole.info('checking the Nextcloud maintenance status')\n\tAxios.get(url)\n\t\t.then(resp => resp.data)\n\t\t.then(status => {\n\t\t\tif (status.maintenance === false) {\n\t\t\t\tconsole.info('Nextcloud is not in maintenance mode anymore -> reloading')\n\n\t\t\t\twindow.location.reload()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconsole.info('Nextcloud is still in maintenance mode')\n\n\t\t\t// Wait 20sec before the next request\n\t\t\tsetTimeout(check, 20 * 1000);\n\t\t})\n\t\t.catch(console.error.bind(this))\n};\n\n// Off we go!\ncheck();\n"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./core/src/OC/legacy-loader.js","webpack:///./core/src/OC/notification.js","webpack:///./core/src/OC/xhr-error.js","webpack:///./core/src/OC/appconfig.js","webpack:///./core/src/OC/appsettings.js","webpack:///./core/src/OC/appswebroots.js","webpack:///./core/src/OC/backbone-webdav.js","webpack:///./core/src/OC/backbone.js","webpack:///./core/src/OC/path.js","webpack:///./core/src/OC/config.js","webpack:///./core/src/OC/currentuser.js","webpack:///./core/src/OC/dialogs.js","webpack:///./core/src/OC/eventsource.js","webpack:///./core/src/OC/get_set.js","webpack:///./core/src/OC/capabilities.js","webpack:///./core/src/OC/host.js","webpack:///./core/src/OC/menu.js","webpack:///./core/src/OC/admin.js","webpack:///./core/src/OC/msg.js","webpack:///./core/src/OC/plugins.js","webpack:///./core/src/OC/search.js","webpack:///./core/src/OC/theme.js","webpack:///./core/src/OC/util-history.js","webpack:///./core/src/OC/util.js","webpack:///./core/src/OC/debug.js","webpack:///./core/src/OC/navigation.js","webpack:///./core/src/OC/webroot.js","webpack:///./core/src/OC/index.js","webpack:///./core/src/OC/constants.js","webpack:///./core/src/OC/routing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/backbone/backbone.js","webpack:///./core/src/OC/l10n-registry.js","webpack:///./core/src/OC/l10n.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./core/src/OC/requesttoken.js","webpack:///./core/src/OCP/appconfig.js","webpack:///./node_modules/dompurify/dist/purify.js","webpack:///./core/src/OCA/index.js","webpack:///./node_modules/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./core/src/OC/query-string.js","webpack:///./core/src/OC/apps.js","webpack:///./node_modules/davclient.js/lib/client.js","webpack:///./core/src/OC/password-confirmation.js","webpack:///./core/src/Util/human-file-size.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./core/src/OC/contactsmenu.js","webpack:///./node_modules/toastify-js/src/toastify.js","webpack:///./node_modules/nextcloud-axios/dist/client.js","webpack:///./core/src/OC/contactsmenu/contact.handlebars","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./core/src/OC/contactsmenu/loading.handlebars","webpack:///./core/src/OC/contactsmenu/error.handlebars","webpack:///./core/src/OC/contactsmenu/menu.handlebars","webpack:///./core/src/OC/contactsmenu/list.handlebars","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/node_modules/is-buffer/index.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./core/src/maintenance.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","factory","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","support","document","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","isArraylike","obj","length","type","isWindow","nodeType","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","Error","noop","Array","isNumeric","parseFloat","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","e","els","seed","match","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","dir","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","matcher","unmatched","innerText","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","disabled","checked","selected","selectedIndex","radio","checkbox","file","password","image","submit","reset","tokens","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","needsContext","rsingleTag","risSimple","winnow","qualifier","not","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","sibling","until","truncate","has","targets","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","readyList","rnotwhite","optionsCache","completed","removeEventListener","Callbacks","flag","createOptions","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","fire","data","stopOnFalse","disable","remove","empty","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","values","notifyWith","resolveWith","readyWait","holdReady","hold","wait","triggerHandler","off","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","Data","uid","acceptData","owner","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","button","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","focus","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","optgroup","tbody","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","fragment","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","opener","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","computePixelPositionAndBoxSizingReliable","cssText","divStyle","backgroundClip","clearCloneStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","Tween","easing","cssHooks","opacity","cssNumber","cssProps","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","opts","oldfire","anim","dataShow","unqueued","overflow","overflowX","overflowY","createTween","tweeners","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","Animation","properties","stopped","tick","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","propFilter","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","bool","nodeHook","propName","attrNames","propFix","rfocusable","removeProp","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","processData","async","contentType","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus","0","1223","xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","_jQuery","_$","$","noConflict","w","hookCallback","some","isObject","isUndefined","isNumber","isDate","res","hasOwnProp","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","copyConfig","from","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","absFloor","number","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","min","lengthDiff","abs","diffs","warn","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","Function","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","modMonth","x","mod","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toObject","toDate","toISOString","keepOffset","zone","toJSON","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","root","previousUnderscore","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","Ctor","_wrapped","VERSION","builtinIteratee","optimizeCb","argCount","accumulator","cb","iteratee","identity","Infinity","restArguments","startIndex","rest","baseCreate","shallowProperty","path","deepGet","MAX_ARRAY_INDEX","getLength","isArrayLike","collect","currentKey","createReduce","reducer","memo","initial","reduce","foldl","inject","reduceRight","foldr","detect","predicate","findIndex","findKey","negate","every","any","includes","include","item","fromIndex","guard","invoke","contextPath","pluck","where","findWhere","lastComputed","shuffle","sample","rand","sortBy","criteria","right","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","isString","pass","take","tail","drop","compact","Boolean","flatten","shallow","isArguments","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","mid","createIndexFinder","predicateFind","lastIndexOf","range","chunk","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","callArgs","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","throttle","previous","later","leading","throttled","trailing","cancel","debounce","immediate","debounced","callNow","wrapper","compose","times","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","functions","methods","createAssigner","keysFunc","extendOwn","assign","deepEq","keyInObj","pick","omit","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","nodelist","Int8Array","isSymbol","isNull","constant","propertyOf","accum","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","escapeChar","template","oldSettings","render","variable","chain","instance","_chain","chainResult","mixin","loadedScripts","loadedStyles","addScript","app","OC","filePath","addStyle","createStyleSheet","updatableNotification","getDefaultNotificationFunction","setDefault","$row","toastify","hideToast","showHtml","isHTML","toast","OCP","Toast","message","toastElement","showUpdate","showTemporary","ajaxConnectionLostHandler","Notification","processAjaxError","_reloadCalled","currentUser","_userIsNavigatingAway","reload","_ajaxConnectionLostHandler","registerXHRForErrorProcessing","appConfig","oc_appconfig","AppConfig","getValue","setValue","getApps","getKeys","deleteKey","appSettings","appid","scriptName","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","_oc_appswebroots","methodMap","update","patch","delete","read","urlError","parsePropFindResult","davProperties","subResult","propStat","propKey","parseIdFromLocation","queryPos","isSuccessStatus","convertModelAttributesToDavProperties","changedProp","callPropFind","client","propFind","depth","propsMapping","callPropPatch","propPatch","changed","callMkCol","request","callMethod","responseJson","locationHeader","davCall","dav","Client","baseUrl","xmlNamespaces","resolveUrl","requestToken","davSync","Backbone","isCollection","Collection","hasInnerCollection","usePUT","stringify","textStatus","errorThrown","VendorBackbone","encodePath","basename","dirname","isSamePath","path1","path2","pathSections1","pathSections2","joinPaths","nonEmptyArgs","lastArg","leadingSlash","trailingSlash","sections","acc","section","_oc_config","rawUid","displayName","getCurrentUser","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","dialogsCounter","alert","title","modal","OK_BUTTON","info","confirm","confirmHtml","prompt","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","label","buttonlist","ocdialog","defaultButton","closeOnEscape","buttons","filepicker","multiselect","mimetypeFilter","sortField","loading","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","Files","getClient","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","Util","isIE","$showGridView","_onGridviewChange","_getGridSettings","newButton","registerMenu","$input","$form","newName","lastPos","selectRange","filename","isFileNameValid","tooltip","placement","checkInput","newname","createDirectory","_fillFilePicker","hideMenus","keypress","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","functionToCall","returnType","datapath","element","selectedName","buttonEnableDisable","dialogType","allowHtml","escapeFunction","_fileexistsshown","fileexists","replacement","controller","dialogDeferred","crop","img","canvas","getContext","drawImage","resampleHermite","toDataURL","H","W2","H2","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ratio_h_half","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","dy","center_x","w0","xx","dx","sqrt","clearRect","putImageData","addConflict","$conflicts","$conflict","$originalDiv","$replacementDiv","humanFileSize","formatDate","mtime","lastModifiedDate","directory","urlSpec","forceIcon","previewpath","generatePreviewUrl","FileReader","reader","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","Image","readAsArrayBuffer","getCroppedPreview","MimeType","getIconUrl","checkboxId","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","generateUrl","gridview","post","$filePickerTemplate","tmpl","$listTmpl","$messageTemplate","$fileexistsTemplate","_getFileList","mimetypes","getFolderContents","files","mimetype","Comparators","fileInfo1","fileInfo2","naturalSortCompare","comparator","file1","file2","isFavorite","fileInfo","tags","TAG_FAVORITE","_fillSlug","entry","simpleSize","sizeColor","icon","filename1","filename2","relativeModifiedDate","previewUrl","$template","paths","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","getToken","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","onmessage","listen","fallBackCallBack","lastLength","capabilities","_oc_capabilities","getCapabilities","getProtocol","protocol","getHost","host","getHostName","hostname","getPort","port","currentMenu","$toggle","$menuEl","headerMenu","menuSpeed","unregisterMenu","lastMenu","showMenu","isAdmin","_oc_isadmin","isUserAdmin","startSaving","startAction","finishedSaving","finishedAction","finishedSuccess","finishedError","_plugins","register","targetName","plugin","plugins","getPlugins","attach","targetObject","search","query","Search","customResults","resultTypes","theme","_theme","_handlers","_pushState","strParams","buildQueryString","history","pushState","pathname","navigator","userAgent","patterns","fill","stroke","replaceState","_cancelPop","addOnPopStateHandler","_parseHashQuery","_decodeQuery","parseUrlQuery","parseQueryString","_onPopState","chunkify","tz","History","computerFileSize","bytes","timestamp","moment","getScrollBarWidth","_scrollBarWidth","inner","outer","w1","w2","clientWidth","stripTime","aa","bb","aNum","Number","bNum","localeCompare","getLanguage","waitFor","internalCallback","isCookieSetToValue","cookies","cookie","_oc_debug","debug","redirect","targetURL","webroot","_oc_webroot","coreApps","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","fileIsBlacklisted","Config","blacklist_files_regex","Apps","ContactsMenu","dialogs","L10N","_processAjaxError","_capabilities","getCanonicalLocale","addTranslations","PasswordConfirmation","Plugins","getRootPath","imagePath","getRequestToken","linkTo","linkToOCS","linkToRemote","linkToRemoteBase","subscribeToRequestTokenChange","service","allOptions","_build","vars","modRewriteWorking","isCore","link","substring","encodeURI","escapeExpression","toHTML","possible","badChars","createFrame","frame","_parent","blockParams","ids","appendContextPath","chr","previousBackbone","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","listeningTo","_listeningTo","Listening","tryCatchOn","offApi","stopListening","_callback","cleanup","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","listener","Model","preinitialize","cid","cidPrefix","initialize","validationError","idAttribute","sync","_validate","unset","silent","changes","changing","_changing","_previousAttributes","_pending","clear","hasChanged","changedAttributes","previousAttributes","fetch","resp","serverAttrs","wrapError","save","validate","isNew","destroy","models","_reset","setOptions","addOptions","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","prevId","$$iterator","iterator","kind","_collection","_kind","_index","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","eventName","_createElement","_setAttributes","addUnderscoreMethods","Class","attribute","defaultVal","addMethod","modelMatcher","Base","mappings","_method","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","route","isRegExp","_routeToRegExp","router","_extractParameters","execute","navigate","optional","decodeURIComponent","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","_hasPushState","rootPath","iWindow","contentWindow","_checkUrlInterval","loadUrl","detachEvent","decodedFragment","_updateHash","protoProps","staticProps","child","__super__","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","registerAppTranslations","appId","translations","pluralFunction","hasAppTranslations","getAppTranslations","L10n","appName","pluralForm","bundle","_getPlural","_unregister","translate","translation","DOMPurify","sanitize","escapeHTML","translatePlural","textSingular","textPlural","plural","language","Handlebars","registerHelper","isBuffer","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isFile","isBlob","isStream","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","product","assignValue","deepMerge","thisArg","str","observers","subscribe","observer","setToken","newToken","endpoint","requiresPasswordConfirmation","requirePasswordConfirmation","freeze$1","freeze","svg","svgFilters","mathMl","freeze$2","html$1","svg$1","mathMl$1","setPrototypeOf","apply$1","Reflect","addToSet","lcElement","newObject","thisValue","seal","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","_typeof","_toConsumableArray","arr2","arraySlice","getGlobal","_createTrustedTypesPolicy","trustedTypes","createPolicy","currentScript","policyName","createHTML","html$$1","createDOMPurify","isSupported","originalDocument","useDOMParser","removeSVGAttr","removeTitle","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","Text","Comment","TrustedTypes","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","importNode","createHTMLDocument","MUSTACHE_EXPR$$1","ERB_EXPR$$1","DATA_ATTR$$1","ARIA_ATTR$$1","IS_SCRIPT_OR_DATA$$1","ATTR_WHITESPACE$$1","IS_ALLOWED_URI$$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_JQUERY","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_DOM_IMPORT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","CONFIG","formElement","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","_forceRemove","outerHTML","_removeAttribute","_initDocument","dirty","leadingWhitespace","querySelector","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","FILTER_ACCEPT","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","elm","allowedTags","insertAdjacentHTML","htmlToInsert","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","idAttr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","namespaceURI","setAttributeNS","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","importedNode","oldNode","returnNode","toStaticHTML","nodeIterator","serializedHTML","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","errorProps","Exception","loc","line","column","captureStackTrace","lineNumber","nop","g","_interopRequireDefault","_interopRequireWildcard","newObj","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","_handlebarsNoConflict2","hb","HandlebarsEnvironment","SafeString","VM","spec","inst","queryString","components","part","build","dynamicSlideToggleEnabled","enableDynamicSlideToggle","registerAppsSlideToggle","areaSelector","area","hideArea","showArea","_XML_CHAR_MAP","_escapeXml","ch","userName","parseClarkNotation","_renderPropSet","propValue","mkcol","xhrProvider","btoa","Promise","fulfill","onreadystatechange","resultBody","parseMultiStatus","ontimeout","_parsePropNode","propNode","subNodes","xmlBody","resolver","foo","responseIterator","XPathResult","ANY_TYPE","responseNode","iterateNext","stringValue","propStatIterator","propStatNode","propIterator","localName","baseParts","parseUrl","subString","scheme","propertyName","pageLoadTime","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","_confirmPassword","$dialog","$error","$buttons","lastLogin","skipSmallSizes","humanList","order","log","readableFormat","relativeSize","toLocaleString","webpackPolyfill","_utils","_exception2","_helpers","_decorators","_logger2","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","8","helpers","partials","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","unregisterHelper","registerPartial","unregisterPartial","registerDecorator","unregisterDecorator","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","symbolMap","numberMap","plurals","pluralize","f","weekdaysParseExact","suffixes","70","80","20","50","100","9","10","30","60","90","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","monthsParseExact","ll","lll","llll","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","word","numberAsNoun","processHoursFunction","Contact","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","ContactCollection","ContactsListView","_subViews","contact","ContactsListItemView","_onChildActionMenuToggle","$src","view","_template","_model","_actionMenuShown","contactTemplate","require","_onOtherActionMenuOpened","imageplaceholder","_onToggleActionsMenu","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","menu","_onSearch","searchTerm","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","_getContacts","term","catch","Toastify","lib","containsClass","yourClass","destination","newWindow","gravity","positionLeft","backgroundColor","avatar","stopOnFocus","buildToast","divElement","background","avatarElement","insertAdjacentElement","closeElement","removeElement","parentElement","timeOutValue","innerWidth","screen","showToast","rootElement","reposition","classUsed","topLeftOffsetSize","bottom","topRightOffsetSize","offsetSize","allToasts","default","requesttoken","depth0","stack1","alias1","lambda","alias2","topAction","hyperlink","secondAction","nullContext","program","helper","helperMissing","alias4","alias3","inverse","_exception","execIteration","priorKey","conditional","includeZero","level","_decoratorsInline2","_decoratorsInline","lookupLevel","levelMap","_len","_key","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","templateWasPrecompiledWithCompilerV7","lookup","depths","invokePartial","resolvePartial","optionsWithHooks","compilerOptions","indent","lines","programs","declaredBlockParams","programWrapper","wrapProgram","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","prog","currentDepths","$Handlebars","unless","webpackContext","req","webpackContextResolve","utils","encode","paramsSerializer","serializedParams","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","process","transformRequest","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","settle","buildURL","parseHeaders","isURLSameOrigin","createError","requestData","auth","Authorization","responseURL","responseType","onabort","xsrfValue","withCredentials","onDownloadProgress","onUploadProgress","upload","cancelToken","enhanceError","config1","config2","Cancel","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","browser","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","InterceptorManager","dispatchRequest","interceptors","fulfilled","rejected","getUri","use","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","reason","normalizedName","isAxiosError","description","fileName","columnNumber","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","requestURL","expires","domain","secure","toGMTString","relativeURL","executor","resolvePromise","maintenance"],"mappings":"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","file":"maintenance.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 577);\n","/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-04-28T16:01Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.0-pre\n * http://sizzlejs.com/\n *\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-12-16\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\tnodeType = context.nodeType;\n\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\tif ( !seed && documentIsHTML ) {\n\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType !== 1 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\tparent = doc.defaultView;\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Support tests\n\t---------------------------------------------------------------------- */\n\tdocumentIsHTML = !isXML( doc );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\f]' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// We once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android<4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android<4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Support: Firefox, Chrome, Safari\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optimization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tif ( elem.ownerDocument.defaultView.opener ) {\n\t\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t\t}\n\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\t\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// Swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur(),\n\t\t\t\t// break the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// Toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = window.location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// Support: BlackBerry 5, iOS 3 (original iPhone)\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Support: Safari<7+, Chrome<37+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate (y) {\n var date;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n var args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays (ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays :\n this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n : (m) ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var 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{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000;\n var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month': return months;\n case 'quarter': return months / 3;\n case 'year': return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.24.0';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}());\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param ready event handler to be called when the script is loaded\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = OC.filePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = OC.filePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport Toastify from 'toastify-js'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use OCP.Toast\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param callback\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tsetDefault: function (callback) {\n\t\tthis.getDefaultNotificationFunction = callback;\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\thide: function ($row, callback) {\n\t\tvar self = this;\n\t\tvar $notification = $('#content');\n\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row;\n\t\t\t$row = undefined;\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification');\n\t\t\treturn;\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function () {\n\t\t\t$(this)[0].toastify.hideToast()\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {Object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowHtml: function (html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? -1 : options.timeout\n\t\tconst toast = window.OCP.Toast.message(html, options)\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {Object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshow: function (text, options) {\n\t\toptions = options || {};\n\t\toptions.timeout = (!options.timeout) ? -1 : options.timeout;\n\t\tconst toast = window.OCP.Toast.message(text, options);\n\t\treturn $(toast.toastElement);\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowUpdate: function (text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast();\n\t\t}\n\t\tthis.updatableNotification = OCP.Toast.message(text, {timeout: -1})\n\t\treturn $(this.updatableNotification.toastElement);\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {array} [options] options array\n\t * @param {int} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tshowTemporary: function (text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || 7;\n\t\tconst toast = window.OCP.Toast.message(text, options);\n\t\treturn $(toast.toastElement);\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use OCP.Toast\n\t */\n\tisHidden: function () {\n\t\treturn !$('#content').find('.toastify').length;\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, {trailing: false})\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function () {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function () {\n\t\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimer++\n\t\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function () {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {getValue, setValue, getApps, getKeys, deleteKey} from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function (app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function (app, key, value) {\n\t\tsetValue(app, key, value);\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function (callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function (app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t});\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function (app, key) {\n\t\tdeleteKey(app, key);\n\t}\n\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\nimport {filePath} from './routing'\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = {scriptName: 'settings.php', cache: true}\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(filePath(props.appid, '', props.scriptName), function (data) {\n\t\t\tpopup.html(data).ready(function () {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function () {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({cache: true})\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(filePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function (jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/**\n * Webdav transport for Backbone.\n *\n * This makes it possible to use Webdav endpoints when\n * working with Backbone models and collections.\n *\n * Requires the davclient.js library.\n *\n * Usage example:\n *\n * var PersonModel = OC.Backbone.Model.extend({\n * // make it use the DAV transport\n * sync: OC.Backbone.davSync,\n *\n * // DAV properties mapping\n * davProperties: {\n * 'id': '{http://example.com/ns}id',\n * 'firstName': '{http://example.com/ns}first-name',\n * 'lastName': '{http://example.com/ns}last-name',\n * 'age': '{http://example.com/ns}age'\n * },\n *\n * // additional parsing, if needed\n * parse: function(props) {\n * // additional parsing (DAV property values are always strings)\n * props.age = parseInt(props.age, 10);\n * return props;\n * }\n * });\n *\n * var PersonCollection = OC.Backbone.Collection.extend({\n * // make it use the DAV transport\n * sync: OC.Backbone.davSync,\n *\n * // use person model\n * // note that davProperties will be inherited\n * model: PersonModel,\n *\n * // DAV collection URL\n * url: function() {\n * return OC.linkToRemote('dav') + '/person/';\n * },\n * });\n */\n\nimport _ from 'underscore';\nimport dav from 'davclient.js';\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n};\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError () {\n\tthrow new Error('A \"url\" property or function must be specified');\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult (result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function (subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties);\n\t\t});\n\t}\n\tvar props = {\n\t\thref: result.href\n\t};\n\n\t_.each(result.propStat, function (propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key;\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key];\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key];\n\t\t}\n\t});\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href);\n\t}\n\n\treturn props;\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @return {string} id\n */\nfunction parseIdFromLocation (url) {\n\tvar queryPos = url.indexOf('?');\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos);\n\t}\n\n\tvar parts = url.split('/');\n\tvar result;\n\tdo {\n\t\tresult = parts[parts.length - 1];\n\t\tparts.pop();\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0);\n\n\treturn result;\n}\n\nfunction isSuccessStatus (status) {\n\treturn status >= 200 && status <= 299;\n}\n\nfunction convertModelAttributesToDavProperties (attrs, davProperties) {\n\tvar props = {};\n\tvar key;\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key];\n\t\tvar value = attrs[key];\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key);\n\t\t\tchangedProp = key;\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value;\n\t\t}\n\t\tprops[changedProp] = value;\n\t}\n\treturn props;\n}\n\nfunction callPropFind (client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function (response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties);\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping);\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift();\n\t\t\t\t}\n\n\t\t\t\toptions.success(results);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response);\n\t\t}\n\t});\n}\n\nfunction callPropPatch (client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function (result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON());\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result);\n\t\t}\n\t});\n\n}\n\nfunction callMkCol (client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function (result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers);\n\t});\n}\n\nfunction callMethod (client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json';\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function (result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON();\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location');\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader);\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties);\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping));\n\t\t\t} else {\n\t\t\t\toptions.success(result.body);\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t});\n\tclient.resolveUrl = function () {\n\t\treturn options.url;\n\t};\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers);\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers);\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers);\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers);\n\t} else {\n\t\treturn callMethod(client, options, model, headers);\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = {type: methodMap[method] || method};\n\tvar isCollection = (model instanceof Backbone.Collection);\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL';\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT';\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError();\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options));\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false;\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties;\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties;\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model);\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties;\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties);\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1;\n\t\t\t} else {\n\t\t\t\toptions.depth = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error;\n\toptions.error = function (xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus;\n\t\toptions.errorThrown = errorThrown;\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown);\n\t\t}\n\t};\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model);\n\tmodel.trigger('request', model, xhr, options);\n\treturn xhr;\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport VendorBackbone from 'backbone';\nimport {davCall, davSync} from './backbone-webdav';\n\nconst Backbone = VendorBackbone.noConflict();\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n});\n\nexport default Backbone;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * URI-Encodes a file path but keep the path slashes.\n *\n * @param {String} path\n * @return {String} encoded path\n */\nexport const encodePath = path => {\n\tif (!path) {\n\t\treturn path\n\t}\n\tconst parts = path.split('/')\n\tconst result = []\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tresult.push(encodeURIComponent(parts[i]))\n\t}\n\treturn result.join('/')\n}\n\n/**\n * Returns the base name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"somefile.txt\"\n *\n * @param {String} path\n * @return {String} base name\n */\nexport const basename = path => path.replace(/\\\\/g, '/').replace(/.*\\//, '')\n\n/**\n * Returns the dir name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"/abc\"\n *\n * @param {String} path\n * @return {String} dir name\n */\nexport const dirname = path => path.replace(/\\\\/g, '/').replace(/\\/[^\\/]*$/, '')\n\n/**\n * Returns whether the given paths are the same, without\n * leading, trailing or doubled slashes and also removing\n * the dot sections.\n *\n * @param {String} path1 first path\n * @param {String} path2 second path\n * @return {bool} true if the paths are the same\n *\n * @since 9.0\n */\nexport const isSamePath = (path1, path2) => {\n\tconst pathSections1 = (path1 || '').split('/').filter(p => p !== '.')\n\tconst pathSections2 = (path2 || '').split('/').filter(p => p !== '.')\n\tpath1 = joinPaths.apply(undefined, pathSections1)\n\tpath2 = joinPaths.apply(undefined, pathSections2)\n\n\treturn path1 === path2\n}\n\n/**\n * Join path sections\n *\n * @param {...String} path sections\n *\n * @return {String} joined path, any leading or trailing slash\n * will be kept\n *\n * @since 8.2\n */\nexport const joinPaths = (...args) => {\n\tif (arguments.length < 1) {\n\t\treturn ''\n\t}\n\n\t// discard empty arguments\n\tconst nonEmptyArgs = args.filter(arg => arg.length > 0)\n\tif (nonEmptyArgs.length < 1) {\n\t\treturn ''\n\t}\n\n\tconst lastArg = nonEmptyArgs[nonEmptyArgs.length - 1]\n\tconst leadingSlash = nonEmptyArgs[0].charAt(0) === '/'\n\tconst trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';\n\tconst sections = nonEmptyArgs.reduce((acc, section) => acc.concat(section.split('/')), [])\n\n\tlet first = !leadingSlash\n\tconst path = sections.reduce((acc, section) => {\n\t\tif (section === '') {\n\t\t\treturn acc\n\t\t}\n\n\t\tif (first) {\n\t\t\tfirst = false\n\t\t\treturn acc + section\n\t\t}\n\n\t\treturn acc + '/' + section\n\t}, '')\n\n\tif (trailingSlash) {\n\t\t// add it back\n\t\treturn path + '/'\n\t}\n\treturn path\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/* global alert */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\t/**\n\t * displays alert dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses OK\n\t * @param modal make the dialog modal\n\t */\n\talert: function (text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t);\n\t},\n\t/**\n\t * displays info dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses OK\n\t * @param modal make the dialog modal\n\t */\n\tinfo: function (text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal);\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t */\n\tconfirm: function (text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t);\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t */\n\tconfirmHtml: function (text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t);\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param text content of dialog\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses YES or NO\n\t * (true or false would be passed to callback respectively)\n\t * @param modal make the dialog modal\n\t * @param name name of the input field\n\t * @param password whether the input should be a password input\n\t */\n\tprompt: function (text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function ($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content';\n\t\t\tvar dialogId = '#' + dialogName;\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t});\n\t\t\tvar input = $('<input/>');\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name);\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ');\n\t\t\t$dlg.append(label);\n\t\t\t$dlg.append(input);\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\t$('body').append($dlg);\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback);\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function () {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(false, input.val());\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function () {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(true, input.val());\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}\n\t\t\t];\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function () {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback(false, input.val());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tinput.focus();\n\t\t\tDialogs.dialogsCounter++;\n\t\t});\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param title dialog title\n\t * @param callback which will be triggered when user presses Choose\n\t * @param multiselect whether it should be possible to select multiple files\n\t * @param mimetypeFilter mimetype to filter by - directories will always be included\n\t * @param modal make the dialog modal\n\t * @param type Type of file picker : Choose, copy, move, copy and move\n\t * @param path path to the folder that the the file can be picket from\n\t * @param options additonal options that need to be set\n\t */\n\tfilepicker: function (title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this;\n\n\t\tthis.filepicker.sortField = 'name';\n\t\tthis.filepicker.sortOrder = 'asc';\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE;\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here');\n\t\tvar newText = t('files', 'New folder');\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here');\n\t\t}\n\n\t\tthis.filepicker.loading = true;\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient();\n\n\t\tthis.filelist = null;\n\t\tpath = path || '';\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function ($tmpl) {\n\t\t\tself.filepicker.loading = false;\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content';\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close');\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = [];\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === \"string\") {\n\t\t\t\tmimetypeFilter = [mimetypeFilter];\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false;\n\t\t\t}\n\n\t\t\t// No grid for IE!\n\t\t\tif (OC.Util.isIE()) {\n\t\t\t\tself.$filePicker.find('#picker-view-toggle').remove();\n\t\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid');\n\t\t\t}\n\n\t\t\t$('body').append(self.$filePicker);\n\n\t\t\tself.$showGridView = $('input#picker-showgridview');\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self));\n\n\t\t\tif (!OC.Util.isIE()) {\n\t\t\t\tself._getGridSettings();\n\t\t\t}\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add');\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tnewButton.hide();\n\t\t\t}\n\t\t\tnewButton.on('focus', function () {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function () {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnewButton.click();\n\t\t\t\t});\n\t\t\t});\n\t\t\tnewButton.on('blur', function () {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback');\n\t\t\t});\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function () {\n\t\t\t\t$input.focus();\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function () {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tself.$form.submit();\n\t\t\t\t});\n\t\t\t\tvar newName = $input.val();\n\t\t\t\tvar lastPos = newName.lastIndexOf('.');\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length;\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos);\n\t\t\t});\n\t\t\tvar $form = self.$filePicker.find('.filenameform');\n\t\t\tvar $input = $form.find('input[type=\\'text\\']');\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']');\n\t\t\t$submit.on('click', function (event) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\t$form.submit();\n\t\t\t});\n\n\t\t\tvar checkInput = function () {\n\t\t\t\tvar filename = $input.val();\n\t\t\t\ttry {\n\t\t\t\t\tif (!Files.isFileNameValid(filename)) {\n\t\t\t\t\t\t// Files.isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function (file) {\n\t\t\t\t\t\treturn file.name === this;\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', {newName: filename}, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error);\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t});\n\t\t\t\t\t$input.tooltip('fixTitle');\n\t\t\t\t\t$input.tooltip('show');\n\t\t\t\t\t$input.addClass('error');\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\t$form.on('submit', function (event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val();\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + newname);\n\t\t\t\t\t});\n\t\t\t\t\tOC.hideMenus();\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback');\n\t\t\t\t\tself.$filePicker.click();\n\t\t\t\t\t$input.val(newText);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$input.keypress(function (event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t$form.submit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.$filePicker.ready(function () {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr');\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody');\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container');\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree');\n\t\t\t\tself.$dirTree.on('click', 'div:not(:last-child)', self, function (event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type);\n\t\t\t\t});\n\t\t\t\tself.$filelist.on('click', 'tr', function (event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type);\n\t\t\t\t});\n\t\t\t\tself.$fileListHeader.on('click', 'a', function (event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path');\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort');\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc';\n\t\t\t\t\tself._fillFilePicker(dir);\n\t\t\t\t});\n\t\t\t\tself._fillFilePicker(path);\n\t\t\t});\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function (returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath;\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = [];\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function (index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'));\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path');\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname');\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType);\n\t\t\t\t\tself.$filePicker.ocdialog('close');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar chooseCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE);\n\t\t\t};\n\n\t\t\tvar copyCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY);\n\t\t\t};\n\n\t\t\tvar moveCallback = function () {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE);\n\t\t\t};\n\n\t\t\tvar buttonlist = [];\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside',\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove();\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog');\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary');\n\t\t\tif (self.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1 && !self.$filePicker.data('.allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t\t}\n\t\t})\n\t\t\t.fail(function (status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false;\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', {error: error}));\n\t\t\t\t}\n\t\t\t});\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function (content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function ($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content';\n\t\t\tvar dialogId = '#' + dialogName;\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? {escapeFunction: ''} : {});\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false;\n\t\t\t}\n\t\t\t$('body').append($dlg);\n\t\t\tvar buttonlist = [];\n\t\t\tswitch (buttons) {\n\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\tcallback(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\tcallback(true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t\t}];\n\t\t\t\t\tbreak;\n\t\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\t\tvar functionToCall = function () {\n\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t});\n\t\t\tDialogs.dialogsCounter++;\n\t\t})\n\t\t\t.fail(function (status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content);\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', {error: error}));\n\t\t\t\t}\n\t\t\t});\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @return {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function (data, original, replacement, controller) {\n\t\tvar self = this;\n\t\tvar dialogDeferred = new $.Deferred();\n\n\t\tvar getCroppedPreview = function (file) {\n\t\t\tvar deferred = new $.Deferred();\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift();\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader();\n\t\t\t\treader.onload = function (e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result]);\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL;\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob);\n\t\t\t\t\tvar image = new Image();\n\t\t\t\t\timage.src = originalUrl;\n\t\t\t\t\timage.onload = function () {\n\t\t\t\t\t\tvar url = crop(image);\n\t\t\t\t\t\tdeferred.resolve(url);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t} else {\n\t\t\t\tdeferred.reject();\n\t\t\t}\n\t\t\treturn deferred;\n\t\t};\n\n\t\tvar crop = function (img) {\n\t\t\tvar canvas = document.createElement('canvas'),\n\t\t\t\ttargetSize = 96,\n\t\t\t\twidth = img.width,\n\t\t\t\theight = img.height,\n\t\t\t\tx, y, size;\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0;\n\t\t\t\tx = (width - height) / 2;\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2;\n\t\t\t\tx = 0;\n\t\t\t}\n\t\t\tsize = Math.min(width, height);\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size;\n\t\t\tcanvas.height = size;\n\t\t\tvar ctx = canvas.getContext(\"2d\");\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size);\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize);\n\n\t\t\treturn canvas.toDataURL(\"image/png\", 0.7);\n\t\t};\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function (canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2);\n\t\t\tH2 = Math.round(H2);\n\t\t\tvar img = canvas.getContext(\"2d\").getImageData(0, 0, W, H);\n\t\t\tvar img2 = canvas.getContext(\"2d\").getImageData(0, 0, W2, H2);\n\t\t\tvar data = img.data;\n\t\t\tvar data2 = img2.data;\n\t\t\tvar ratio_w = W / W2;\n\t\t\tvar ratio_h = H / H2;\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2);\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2);\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4;\n\t\t\t\t\tvar weight = 0;\n\t\t\t\t\tvar weights = 0;\n\t\t\t\t\tvar weights_alpha = 0;\n\t\t\t\t\tvar gx_r = 0;\n\t\t\t\t\tvar gx_g = 0;\n\t\t\t\t\tvar gx_b = 0;\n\t\t\t\t\tvar gx_a = 0;\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h;\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half;\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w;\n\t\t\t\t\t\tvar w0 = dy * dy; //pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half;\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx);\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t//hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1;\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W);\n\t\t\t\t\t\t\t\t\t//alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3];\n\t\t\t\t\t\t\t\t\tweights_alpha += weight;\n\t\t\t\t\t\t\t\t\t//colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255)\n\t\t\t\t\t\t\t\t\t\tweight = weight * data[dx + 3] / 250;\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx];\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1];\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2];\n\t\t\t\t\t\t\t\t\tweights += weight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights;\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights;\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights;\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext(\"2d\").clearRect(0, 0, Math.max(W, W2), Math.max(H, H2));\n\t\t\tcanvas.width = W2;\n\t\t\tcanvas.height = H2;\n\t\t\tcanvas.getContext(\"2d\").putImageData(img2, 0, 0);\n\t\t};\n\n\t\tvar addConflict = function ($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict');\n\t\t\tvar $originalDiv = $conflict.find('.original');\n\t\t\tvar $replacementDiv = $conflict.find('.replacement');\n\n\t\t\t$conflict.data('data', data);\n\n\t\t\t$conflict.find('.filename').text(original.name);\n\t\t\t$originalDiv.find('.size').text(humanFileSize(original.size));\n\t\t\t$originalDiv.find('.mtime').text(formatDate(original.mtime));\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModifiedDate) {\n\t\t\t\t$replacementDiv.find('.size').text(humanFileSize(replacement.size));\n\t\t\t\t$replacementDiv.find('.mtime').text(formatDate(replacement.lastModifiedDate));\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name;\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t};\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec);\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, \"%27\");\n\t\t\t$originalDiv.find('.icon').css({\"background-image\": \"url('\" + previewpath + \"')\"});\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction (path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')');\n\t\t\t\t}, function () {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type);\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')');\n\t\t\t\t}\n\t\t\t);\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length;\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId);\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId);\n\n\t\t\t$conflicts.append($conflict);\n\n\t\t\t//set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold');\n\t\t\t} else if (replacement.lastModifiedDate && replacement.lastModifiedDate.getTime() < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold');\n\t\t\t} else {\n\t\t\t\t//TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold');\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold');\n\t\t\t} else {\n\t\t\t\t//TODO add to same size collection?\n\t\t\t}\n\n\t\t\t//TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true);\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'));\n\t\t\t}\n\t\t};\n\t\t//var selection = controller.getSelection(data.originalFiles);\n\t\t//if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t//} else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content';\n\t\tvar dialogId = '#' + dialogName;\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts');\n\t\t\taddConflict($conflicts, original, replacement);\n\n\t\t\tvar count = $(dialogId + ' .conflict').length;\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{count: count}\n\t\t\t);\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title);\n\n\t\t\t//recalculate dimensions\n\t\t\t$(window).trigger('resize');\n\t\t\tdialogDeferred.resolve();\n\t\t} else {\n\t\t\t//create dialog\n\t\t\tthis._fileexistsshown = true;\n\t\t\t$.when(this._getFileExistsTemplate()).then(function ($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict');\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t});\n\t\t\t\t$('body').append($dlg);\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts');\n\t\t\t\t\taddConflict($conflicts, original, replacement);\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function () {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\t\tclick: function () {\n\t\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(dialogId).ocdialog('close');\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function () {\n\t\t\t\t\t\tself._fileexistsshown = false;\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(dialogId).css('height', 'auto');\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue');\n\t\t\t\t$primaryButton.prop('disabled', true);\n\n\t\t\t\tfunction updatePrimaryButton () {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length;\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0);\n\t\t\t\t}\n\n\t\t\t\t//add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function () {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]');\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function () {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]');\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function () {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]');\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'));\n\t\t\t\t});\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function () {\n\t\t\t\t\tvar $checkbox = $(this);\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'));\n\t\t\t\t});\n\n\t\t\t\t//update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function () {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length;\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'));\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', {count: count}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('');\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton();\n\t\t\t\t});\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function () {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length;\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'));\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', {count: count}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false);\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('');\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton();\n\t\t\t\t});\n\n\t\t\t\tdialogDeferred.resolve();\n\t\t\t})\n\t\t\t\t.fail(function () {\n\t\t\t\t\tdialogDeferred.reject();\n\t\t\t\t\talert(t('core', 'Error loading file exists template'));\n\t\t\t\t});\n\t\t}\n\t\t//}\n\t\treturn dialogDeferred.promise();\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function () {\n\t\tvar self = this;\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function (response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview;\n\t\t\tself.$showGridView.next('#picker-view-toggle')\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview);\n\t\t});\n\t},\n\t_onGridviewChange: function () {\n\t\tvar show = this.$showGridView.is(':checked');\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), {\n\t\t\t\tshow: show\n\t\t\t});\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show);\n\t},\n\t_getFilePickerTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function (tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl);\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach();\n\t\t\t\tdefer.resolve(self.$filePickerTemplate);\n\t\t\t})\n\t\t\t\t.fail(function (jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown);\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getMessageTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function (tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl);\n\t\t\t\tdefer.resolve(self.$messageTemplate);\n\t\t\t})\n\t\t\t\t.fail(function (jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown);\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getFileExistsTemplate: function () {\n\t\tvar defer = $.Deferred();\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this;\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function (tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl);\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate);\n\t\t\t})\n\t\t\t\t.fail(function () {\n\t\t\t\t\tdefer.reject();\n\t\t\t\t});\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate);\n\t\t}\n\t\treturn defer.promise();\n\t},\n\t_getFileList: function (dir, mimeType) { //this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === \"string\") {\n\t\t\tmimeType = [mimeType];\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function (dir) {\n\t\tvar self = this;\n\t\tthis.$filelist.empty();\n\t\tthis.$filePicker.find('.emptycontent').hide();\n\t\tthis.$filelistContainer.addClass('icon-loading');\n\t\tthis.$filePicker.data('path', dir);\n\t\tvar filter = this.$filePicker.data('mimetype');\n\t\tif (typeof (filter) === \"string\") {\n\t\t\tfilter = [filter];\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s');\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden');\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n');\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s');\n\t\t}\n\t\tself.filepicker.filesClient.getFolderContents(dir).then(function (status, files) {\n\t\t\tself.filelist = files;\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function (file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function (fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name);\n\t\t\t\t},\n\t\t\t\tsize: function (fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size;\n\t\t\t\t},\n\t\t\t\tmtime: function (fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime;\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name;\n\t\t\tfiles = files.sort(function (file1, file2) {\n\t\t\t\tvar isFavorite = function (fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0;\n\t\t\t\t};\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2);\n\t\t\t});\n\n\t\t\tself._fillSlug();\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show();\n\t\t\t\tself.$fileListHeader.hide();\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide();\n\t\t\t\tself.$fileListHeader.show();\n\t\t\t}\n\n\t\t\t$.each(files, function (idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype);\n\t\t\t\tvar simpleSize, sizeColor;\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = humanFileSize(parseInt(entry.size, 10), true);\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2));\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending');\n\t\t\t\t\tsizeColor = 80;\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t});\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t};\n\t\t\t\t\tvar img = new Image();\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);\n\t\t\t\t\timg.onload = function () {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')');\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\timg.src = previewUrl;\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row);\n\t\t\t});\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading');\n\t\t});\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function () {\n\t\tthis.$dirTree.empty();\n\t\tvar self = this;\n\t\tvar dir;\n\t\tvar path = this.$filePicker.data('path');\n\t\tvar $template = $('<div data-dir=\"{dir}\"><a>{name}</a></div>').addClass('crumb');\n\t\tif (path) {\n\t\t\tvar paths = path.split('/');\n\t\t\t$.each(paths, function (index, dir) {\n\t\t\t\tdir = paths.pop();\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}));\n\t\t\t});\n\t\t}\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, {escapeFunction: null}).prependTo(this.$dirTree);\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function (event, type) {\n\t\tvar self = event.data;\n\t\tvar dir = $(event.target).closest('.crumb').data('dir');\n\t\tself._fillFilePicker(dir);\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog');\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog);\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop());\n\t\tif (this.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1) {\n\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function (event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog');\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary');\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected');\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected');\n\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'));\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'));\n\t\t\tif (this.$filePicker.data('mimetype').indexOf(\"httpd/unix-directory\") !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", false);\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop(\"disabled\", true);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function (type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', {folder: dir});\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', {folder: dir});\n\t\tvar buttons = $('.oc-dialog-buttonrow button');\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText);\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText);\n\t\t\t\tbreak;\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText);\n\t\t\t\tbuttons.eq(1).text(moveText);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * ownCloud\n *\n * @author Robin Appelman\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE\n * License as published by the Free Software Foundation; either\n * version 3 of the License, or any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU AFFERO GENERAL PUBLIC LICENSE for more details.\n *\n * You should have received a copy of the GNU Affero General Public\n * License along with this library. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Wrapper for server side events\n * (http://en.wikipedia.org/wiki/Server-sent_events)\n * includes a fallback for older browsers and IE\n *\n * use server side events with caution, too many open requests can hang the\n * server\n */\n\n/* global EventSource */\n\nimport $ from 'jquery'\n\nimport {getToken} from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function (src, data) {\n\tvar dataStr = '';\n\tvar name;\n\tvar joinChar;\n\tthis.typelessListeners = [];\n\tthis.closed = false;\n\tthis.listeners = {};\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&';\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken());\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&';\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?';\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr);\n\t\tthis.source.onmessage = function (e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data));\n\t\t\t}\n\t\t}.bind(this);\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount;\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this;\n\t\tthis.iframe = $('<iframe/>');\n\t\tthis.iframe.attr('id', iframeId);\n\t\tthis.iframe.hide();\n\n\t\tjoinChar = '&';\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?';\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr);\n\t\t$('body').append(this.iframe);\n\t\tthis.useFallBack = true;\n\t\tOCEventSource.iframeCount++;\n\t}\n\t//add close listener\n\tthis.listen('__internal__', function (data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close();\n\t\t}\n\t}.bind(this));\n};\nOCEventSource.fallBackSources = [];\nOCEventSource.iframeCount = 0;//number of fallback iframes\nOCEventSource.fallBackCallBack = function (id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data);\n};\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {},//only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function (type, data) {\n\t\tvar i;\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data);\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0,//for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function (type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = [];\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function (e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback);\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function () {\n\t\tthis.closed = true;\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close();\n\t\t}\n\t}\n};\n\nexport default OCEventSource;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Get a variable by name\n * @param {string} name\n * @return {*}\n */\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (var i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n * @param {string} name\n * @param {*} value\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split(\".\")\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst capabilities = window._oc_capabilities || {}\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0\n */\nexport const getCapabilities = () => capabilities\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Protocol that is used to access this Nextcloud instance\n * @return {string} Used protocol\n * @deprecated 17.0.0 use window.location.protocol directly\n */\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {int} port number\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport {menuSpeed} from './constants'\n\nlet currentMenu = null\nlet currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle\n * @param {jQuery} $menuEl\n * @param {function|undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @returns {undefined}\n */\nexport const registerMenu = ($toggle, $menuEl, toggle, headerMenu) => {\n\t$menuEl.addClass('menu')\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(($toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON')\n\t\t? 'click.menu'\n\t\t: 'click.menu keyup.menu', function (event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== \"Enter\") {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * @todo Write documentation\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function () {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {Object} [$toggle=null] menu toggle\n * @param {Object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {bool} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/* global t */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery';\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t */\n\tstartSaving: function (selector) {\n\t\tthis.startAction(selector, t('core', 'Saving...'));\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show();\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {Object} response Response of the server\n\t * @param {Object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving: function (selector, response) {\n\t\tthis.finishedAction(selector, response);\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {Object} response Response of the server\n\t * @param {Object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction: function (selector, response) {\n\t\tif (response.status === \"success\") {\n\t\t\tthis.finishedSuccess(selector, response.data.message);\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message);\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show();\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {Object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError: function (selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show();\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * @namespace OC.Plugins\n */\nexport default {\n\n\t/**\n\t * @type Array.<OC.Plugin>\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {String} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin\n\t */\n\tregister: function (targetName, plugin) {\n\t\tvar plugins = this._plugins[targetName];\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = [];\n\t\t}\n\t\tplugins.push(plugin);\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {String} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins: function (targetName) {\n\t\treturn this._plugins[targetName] || [];\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {String} targetName app name / class name\n\t * @param {Object} object to be extended\n\t * @param {Object} [options] options\n\t */\n\tattach: function (targetName, targetObject, options) {\n\t\tvar plugins = this.getPlugins(targetName);\n\t\tfor (var i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {String} targetName app name / class name\n\t * @param {Object} object to be extended\n\t * @param {Object} [options] options\n\t */\n\tdetach: function (targetName, targetObject, options) {\n\t\tvar plugins = this.getPlugins(targetName);\n\t\tfor (var i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options);\n\t\t\t}\n\t\t}\n\t}\n\n}","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport OC from './index'\n\n/**\n * Do a search query and display the results\n * @param {string} query the search query\n */\nconst search = function (query) {\n\tOC.Search.search(query, null, 0, 30);\n};\n\n/**\n * @namespace OC.search\n */\nsearch.customResults = {};\n/**\n * @deprecated use get/setFormatter() instead\n */\nsearch.resultTypes = {};\n\nexport default search;\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const theme = window._theme || {}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\n\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState: function (params, url, replace) {\n\t\tvar strParams;\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params;\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params);\n\t\t}\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams;\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tvar patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]');\n\t\t\t\tfor (var i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i];\n\t\t\t\t\tpattern.style.fill = pattern.style.fill;\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke;\n\t\t\t\t\tpattern.removeAttribute(\"filter\");\n\t\t\t\t\tpattern.setAttribute(\"filter\", \"url(#invert)\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url);\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url);\n\t\t\t}\n\t\t}\n\t\t// use URL hash for IE8\n\t\telse {\n\t\t\twindow.location.hash = '?' + strParams;\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true;\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\tpushState: function (params, url) {\n\t\treturn this._pushState(params, url, false);\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {Object|string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState: function (params, url) {\n\t\treturn this._pushState(params, url, true);\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param handler function\n\t */\n\taddOnPopStateHandler: function (handler) {\n\t\tthis._handlers.push(handler);\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t */\n\t_parseHashQuery: function () {\n\t\tvar hash = window.location.hash,\n\t\t\tpos = hash.indexOf('?');\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1);\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1);\n\t\t}\n\t\treturn '';\n\t},\n\n\t_decodeQuery: function (query) {\n\t\treturn query.replace(/\\+/g, ' ');\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return map of parameters\n\t */\n\tparseUrlQuery: function () {\n\t\tvar query = this._parseHashQuery(),\n\t\t\tparams;\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query));\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)));\n\t\treturn params || {};\n\t},\n\n\t_onPopState: function (e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false;\n\t\t\treturn;\n\t\t}\n\t\tvar params;\n\t\tif (!this._handlers.length) {\n\t\t\treturn;\n\t\t}\n\t\tparams = (e && e.state);\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params);\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {};\n\t\t}\n\t\tfor (var i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params);\n\t\t}\n\t}\n}\n","/* global t */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport humanFileSize from '../Util/human-file-size'\n\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tlet tz = [], x = 0, y = -1, n = 0, code, c;\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x);\n\t\t// only include the dot in strings\n\t\tvar m = ((!n && c === '.') || (c >= '0' && c <= '9'));\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++;\n\t\t\ttz[y] = '';\n\t\t\tn = m;\n\t\t}\n\t\ttz[y] += c;\n\t\tx++;\n\t}\n\treturn tz;\n}\n\n/**\n * Utility functions\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t// TODO: remove original functions from global namespace\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize: function (string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar s = string.toLowerCase().trim();\n\t\tvar bytes = null;\n\n\t\tvar bytesArray = {\n\t\t\t'b': 1,\n\t\t\t'k': 1024,\n\t\t\t'kb': 1024,\n\t\t\t'mb': 1024 * 1024,\n\t\t\t'm': 1024 * 1024,\n\t\t\t'gb': 1024 * 1024 * 1024,\n\t\t\t'g': 1024 * 1024 * 1024,\n\t\t\t'tb': 1024 * 1024 * 1024 * 1024,\n\t\t\t't': 1024 * 1024 * 1024 * 1024,\n\t\t\t'pb': 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\t'p': 1024 * 1024 * 1024 * 1024 * 1024\n\t\t};\n\n\t\tvar matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i);\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s);\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]];\n\t\t}\n\n\t\tbytes = Math.round(bytes);\n\t\treturn bytes;\n\t},\n\n\t/**\n\t * @param timestamp\n\t * @param format\n\t * @returns {string} timestamp formatted as requested\n\t */\n\tformatDate: function (timestamp, format) {\n\t\tformat = format || \"LLL\";\n\t\treturn moment(timestamp).format(format);\n\t},\n\n\t/**\n\t * @param timestamp\n\t * @returns {string} human readable difference from now\n\t */\n\trelativeModifiedDate: function (timestamp) {\n\t\tvar diff = moment().diff(moment(timestamp));\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago');\n\t\t}\n\t\treturn moment(timestamp).fromNow();\n\t},\n\n\t/**\n\t * Returns whether this is IE\n\t *\n\t * @return {bool} true if this is IE, false otherwise\n\t */\n\tisIE: function () {\n\t\treturn $('html').hasClass('ie');\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {int} width of scrollbar\n\t */\n\tgetScrollBarWidth: function () {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth;\n\t\t}\n\n\t\tvar inner = document.createElement('p');\n\t\tinner.style.width = \"100%\";\n\t\tinner.style.height = \"200px\";\n\n\t\tvar outer = document.createElement('div');\n\t\touter.style.position = \"absolute\";\n\t\touter.style.top = \"0px\";\n\t\touter.style.left = \"0px\";\n\t\touter.style.visibility = \"hidden\";\n\t\touter.style.width = \"200px\";\n\t\touter.style.height = \"150px\";\n\t\touter.style.overflow = \"hidden\";\n\t\touter.appendChild(inner);\n\n\t\tdocument.body.appendChild(outer);\n\t\tvar w1 = inner.offsetWidth;\n\t\touter.style.overflow = 'scroll';\n\t\tvar w2 = inner.offsetWidth;\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth;\n\t\t}\n\n\t\tdocument.body.removeChild(outer);\n\n\t\tthis._scrollBarWidth = (w1 - w2);\n\n\t\treturn this._scrollBarWidth;\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime: function (date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t * @param a first string to compare\n\t * @param b second string to compare\n\t * @return -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare: function (a, b) {\n\t\tvar x;\n\t\tvar aa = chunkify(a);\n\t\tvar bb = chunkify(b);\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tvar aNum = Number(aa[x]), bNum = Number(bb[x]);\n\t\t\t\t// note: == is correct here\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum;\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length;\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t * @param {function} callback\n\t * @param {integer} interval in milliseconds\n\t */\n\twaitFor: function (callback, interval) {\n\t\tvar internalCallback = function () {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval);\n\t\t\t}\n\t\t};\n\n\t\tinternalCallback();\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue: function (name, value) {\n\t\tvar cookies = document.cookie.split(';');\n\t\tfor (var i = 0; i < cookies.length; i++) {\n\t\t\tvar cookie = cookies[i].split('=');\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Redirect to the target URL, can also be used for downloads.\n * @param {string} targetURL URL to redirect to\n * @deprecated 17.0.0 use window.location directly\n */\nexport const redirect = targetURL => window.location = targetURL\n\n/**\n * Reloads the current page\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => window.location.reload()\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tvar pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {addScript, addStyle} from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport {AppConfig, appConfig} from './appconfig'\nimport {appSettings} from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from './path'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport {currentUser, getCurrentUser} from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport {get, set} from './get_set'\nimport {getCapabilities} from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n\tsubscribe as subscribeToRequestTokenChange,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport {isUserAdmin} from './admin'\nimport L10N from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tfilePath,\n\tgenerateUrl,\n\tgetRootPath,\n\timagePath,\n\tlinkTo,\n\tlinkToOCS,\n\tlinkToRemote,\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport search from './search'\nimport {theme} from './theme'\nimport Util from './util'\nimport {debug} from './debug'\nimport {redirect, reload} from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t * @param {string} file to check\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type String\n\t * @deprecated use {@link OC.getCurrentUser} instead\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 17.0.0 use OC.getCapabilities() instead\n\t */\n\t_capabilities: getCapabilities(),\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\tbasename,\n\tencodePath,\n\tdirname,\n\tisSamePath,\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * L10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {String} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\tsearch,\n\ttheme,\n\tUtil,\n\tdebug,\n\tfilePath,\n\tgenerateUrl,\n\tget: get(window),\n\tset: set(window),\n\tgetRootPath,\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\tlinkTo,\n\tlinkToOCS,\n\tlinkToRemote,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type string\n\t *\n\t * @deprecated since 8.2, use OC.getRootPath() instead\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribeToRequestTokenChange(token => OC.requestToken = token)\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software = you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation either version 3 of the\n * License or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not see <http://www.gnu.org/licenses/>.\n */\n\nexport const coreApps = ['', 'admin','log','core/search','settings','core','3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\n\nimport OC from './index'\nimport {coreApps} from './constants'\n\n/**\n * Get an absolute url to a file in an app\n * @param {string} app the id of the app the file belongs to\n * @param {string} file the file path relative to the app folder\n * @return {string} Absolute URL to a file\n */\nexport const linkTo = (app, file) => filePath(app, '', file)\n\n/**\n * Creates a relative url for remote use\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => getRootPath() + '/remote.php/' + service\n\n/**\n * @brief Creates an absolute url for remote use\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemote = service => window.location.protocol + '//' + window.location.host + linkToRemoteBase(service)\n\n/**\n * Gets the base path for the given OCS API service.\n * @param {string} service name\n * @param {int} version OCS API version\n * @return {string} OCS API base path\n */\nexport const linkToOCS = (service, version) => {\n\tversion = (version !== 2) ? 1 : 2\n\treturn window.location.protocol + '//' + window.location.host + getRootPath() + '/ocs/v' + version + '.php/' + service + '/'\n}\n\n/**\n * Generates the absolute url for the given relative url, which can contain parameters.\n * Parameters will be URL encoded automatically.\n * @param {string} url\n * @param [params] params\n * @param [options] options\n * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n * @return {string} Absolute URL for the given relative URL\n */\nexport const generateUrl = (url, params, options) => {\n\tconst defaultOptions = {\n\t\t\tescape: true\n\t\t},\n\t\tallOptions = options || {};\n\t_.defaults(allOptions, defaultOptions);\n\n\tconst _build = function (text, vars) {\n\t\tvars = vars || [];\n\t\treturn text.replace(/{([^{}]*)}/g,\n\t\t\tfunction (a, b) {\n\t\t\t\tvar r = (vars[b]);\n\t\t\t\tif (allOptions.escape) {\n\t\t\t\t\treturn (typeof r === 'string' || typeof r === 'number') ? encodeURIComponent(r) : encodeURIComponent(a);\n\t\t\t\t} else {\n\t\t\t\t\treturn (typeof r === 'string' || typeof r === 'number') ? r : a;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\tif (url.charAt(0) !== '/') {\n\t\turl = '/' + url;\n\n\t}\n\n\tif (OC.config.modRewriteWorking === true) {\n\t\treturn getRootPath() + _build(url, params);\n\t}\n\n\treturn getRootPath() + '/index.php' + _build(url, params);\n}\n\n/**\n * get the absolute path to an image file\n * if no extension is given for the image, it will automatically decide\n * between .png and .svg based on what the browser supports\n *\n * @param {string} app the app id to which the image belongs\n * @param {string} file the name of the image file\n * @return {string}\n */\nexport const imagePath = (app, file) => {\n\tif (file.indexOf('.') === -1) {\n\t\t//if no extension is given, use svg\n\t\treturn filePath(app, 'img', file + '.svg')\n\t}\n\n\treturn filePath(app, 'img', file)\n}\n\n/**\n * Get the absolute url for a file in an app\n * @param {string} app the id of the app\n * @param {string} type the type of the file to link to (e.g. css,img,ajax.template)\n * @param {string} file the filename\n * @return {string} Absolute URL for a file in an app\n */\nexport const filePath = (app, type, file) => {\n\tconst isCore = coreApps.indexOf(app) !== -1\n\tlet link = getRootPath()\n\tif (file.substring(file.length - 3) === 'php' && !isCore) {\n\t\tlink += '/index.php/apps/' + app;\n\t\tif (file !== 'index.php') {\n\t\t\tlink += '/'\n\t\t\tif (type) {\n\t\t\t\tlink += encodeURI(type + '/')\n\t\t\t}\n\t\t\tlink += file\n\t\t}\n\t} else if (file.substring(file.length - 3) !== 'php' && !isCore) {\n\t\tlink = OC.appswebroots[app];\n\t\tif (type) {\n\t\t\tlink += '/' + type + '/'\n\t\t}\n\t\tif (link.substring(link.length - 1) !== '/') {\n\t\t\tlink += '/'\n\t\t}\n\t\tlink += file\n\t} else {\n\t\tif ((app === 'settings' || app === 'core' || app === 'search') && type === 'ajax') {\n\t\t\tlink += '/index.php/'\n\t\t} else {\n\t\t\tlink += '/'\n\t\t}\n\t\tif (!isCore) {\n\t\t\tlink += 'apps/'\n\t\t}\n\t\tif (app !== '') {\n\t\t\tapp += '/'\n\t\t\tlink += app\n\t\t}\n\t\tif (type) {\n\t\t\tlink += type + '/'\n\t\t}\n\t\tlink += file\n\t}\n\treturn link\n}\n\n/**\n * Returns the web root path where this Nextcloud instance\n * is accessible, with a leading slash.\n * For example \"/nextcloud\".\n *\n * @return {string} web root path\n *\n * @since 8.2\n */\nexport const getRootPath = () => OC.webroot\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\n\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsSUFBTSxNQUFNLEdBQUc7QUFDYixLQUFHLEVBQUUsT0FBTztBQUNaLEtBQUcsRUFBRSxNQUFNO0FBQ1gsS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtDQUNkLENBQUM7O0FBRUYsSUFBTSxRQUFRLEdBQUcsWUFBWTtJQUN2QixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUU3QixTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsU0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDcEI7O0FBRU0sU0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBbUI7QUFDM0MsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsU0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsVUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELFdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDOUI7S0FDRjtHQUNGOztBQUVELFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRU0sSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxJQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsU0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7Q0FDcEMsQ0FBQzs7O0FBR0YsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsVUFJTSxVQUFVLEdBSmhCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixXQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0dBQ3BGLENBQUM7Q0FDSDtRQUNPLFVBQVUsR0FBVixVQUFVOzs7OztBQUlYLElBQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBUyxLQUFLLEVBQUU7QUFDdEQsU0FBTyxBQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Q0FDakcsQ0FBQzs7Ozs7QUFHSyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsUUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGFBQU8sQ0FBQyxDQUFDO0tBQ1Y7R0FDRjtBQUNELFNBQU8sQ0FBQyxDQUFDLENBQUM7Q0FDWDs7QUFHTSxTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxNQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsUUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixhQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixhQUFPLEVBQUUsQ0FBQztLQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixhQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDcEI7Ozs7O0FBS0QsVUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsTUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxXQUFPLE1BQU0sQ0FBQztHQUFFO0FBQzlDLFNBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDN0M7O0FBRU0sU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLE1BQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixXQUFPLElBQUksQ0FBQztHQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsV0FBTyxJQUFJLENBQUM7R0FDYixNQUFNO0FBQ0wsV0FBTyxLQUFLLENBQUM7R0FDZDtDQUNGOztBQUVNLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLE9BQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxRQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixTQUFPLE1BQU0sQ0FBQztDQUNmOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxTQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0NBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19\n","// Backbone.js 1.4.0\n\n// (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n create: 'POST',\n update: 'PUT',\n patch: 'PATCH',\n delete: 'DELETE',\n read: 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {String} appId\n * @param {Object} translations\n * @param {Function} pluralFunction\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {String} appId\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {String} appId\n * @return {Boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {String} appId\n * @return {Object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {String} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload: function(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tvar deferred = $.Deferred();\n\t\t\tvar promise = deferred.promise();\n\t\t\tpromise.then(callback);\n\t\t\tdeferred.resolve();\n\t\t\treturn promise;\n\t\t}\n\n\t\tvar self = this;\n\t\tvar url = OC.filePath(appName, 'l10n', OC.getLocale() + '.json');\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback);\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {String} appName name of the app\n\t * @param {Object<String,String>} bundle\n\t */\n\tregister: function(appName, bundle, pluralForm) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private do not use this\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate: function(app, text, vars, count, options) {\n\t\tvar defaultOptions = {\n\t\t\t\tescape: true\n\t\t\t},\n\t\t\tallOptions = options || {};\n\t\t_.defaults(allOptions, defaultOptions);\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tvar _build = function (text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction (a, b) {\n\t\t\t\t\tvar r = vars[b];\n\t\t\t\t\tif(typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\tif(allOptions.escape) {\n\t\t\t\t\t\t\treturn DOMPurify.sanitize(escapeHTML(r));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn DOMPurify.sanitize(r);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn DOMPurify.sanitize(a);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\t\tvar translation = text;\n\t\tvar bundle = getAppTranslations(app);\n\t\tvar value = bundle.translations[text];\n\t\tif( typeof(value) !== 'undefined' ){\n\t\t\ttranslation = value;\n\t\t}\n\n\t\tif(typeof vars === 'object' || count !== undefined ) {\n\t\t\treturn DOMPurify.sanitize(_build(translation, vars, count));\n\t\t} else {\n\t\t\treturn DOMPurify.sanitize(translation);\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param [vars] map of placeholder key to value\n\t * @param {array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural: function(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_';\n\t\tconst bundle = getAppTranslations(app);\n\t\tconst value = bundle.translations[identifier];\n\t\tif( typeof(value) !== 'undefined' ){\n\t\t\tvar translation = value;\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tvar plural = bundle.pluralFunction(count);\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options);\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options);\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options);\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @private\n\t */\n\t_getPlural: function(number) {\n\t\tvar language = OC.getLanguage();\n\t\tif ('pt_BR' === language) {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr';\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (1 == number) ? 0 : 1;\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('_'));\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\t\tcase 'az':\n\t\t\tcase 'bo':\n\t\t\tcase 'dz':\n\t\t\tcase 'id':\n\t\t\tcase 'ja':\n\t\t\tcase 'jv':\n\t\t\tcase 'ka':\n\t\t\tcase 'km':\n\t\t\tcase 'kn':\n\t\t\tcase 'ko':\n\t\t\tcase 'ms':\n\t\t\tcase 'th':\n\t\t\tcase 'tr':\n\t\t\tcase 'vi':\n\t\t\tcase 'zh':\n\t\t\t\treturn 0;\n\n\t\t\tcase 'af':\n\t\t\tcase 'bn':\n\t\t\tcase 'bg':\n\t\t\tcase 'ca':\n\t\t\tcase 'da':\n\t\t\tcase 'de':\n\t\t\tcase 'el':\n\t\t\tcase 'en':\n\t\t\tcase 'eo':\n\t\t\tcase 'es':\n\t\t\tcase 'et':\n\t\t\tcase 'eu':\n\t\t\tcase 'fa':\n\t\t\tcase 'fi':\n\t\t\tcase 'fo':\n\t\t\tcase 'fur':\n\t\t\tcase 'fy':\n\t\t\tcase 'gl':\n\t\t\tcase 'gu':\n\t\t\tcase 'ha':\n\t\t\tcase 'he':\n\t\t\tcase 'hu':\n\t\t\tcase 'is':\n\t\t\tcase 'it':\n\t\t\tcase 'ku':\n\t\t\tcase 'lb':\n\t\t\tcase 'ml':\n\t\t\tcase 'mn':\n\t\t\tcase 'mr':\n\t\t\tcase 'nah':\n\t\t\tcase 'nb':\n\t\t\tcase 'ne':\n\t\t\tcase 'nl':\n\t\t\tcase 'nn':\n\t\t\tcase 'no':\n\t\t\tcase 'oc':\n\t\t\tcase 'om':\n\t\t\tcase 'or':\n\t\t\tcase 'pa':\n\t\t\tcase 'pap':\n\t\t\tcase 'ps':\n\t\t\tcase 'pt':\n\t\t\tcase 'so':\n\t\t\tcase 'sq':\n\t\t\tcase 'sv':\n\t\t\tcase 'sw':\n\t\t\tcase 'ta':\n\t\t\tcase 'te':\n\t\t\tcase 'tk':\n\t\t\tcase 'ur':\n\t\t\tcase 'zu':\n\t\t\t\treturn (1 == number) ? 0 : 1;\n\n\t\t\tcase 'am':\n\t\t\tcase 'bh':\n\t\t\tcase 'fil':\n\t\t\tcase 'fr':\n\t\t\tcase 'gun':\n\t\t\tcase 'hi':\n\t\t\tcase 'hy':\n\t\t\tcase 'ln':\n\t\t\tcase 'mg':\n\t\t\tcase 'nso':\n\t\t\tcase 'xbr':\n\t\t\tcase 'ti':\n\t\t\tcase 'wa':\n\t\t\t\treturn ((0 == number) || (1 == number)) ? 0 : 1;\n\n\t\t\tcase 'be':\n\t\t\tcase 'bs':\n\t\t\tcase 'hr':\n\t\t\tcase 'ru':\n\t\t\tcase 'sh':\n\t\t\tcase 'sr':\n\t\t\tcase 'uk':\n\t\t\t\treturn ((1 == number % 10) && (11 != number % 100)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n\t\t\tcase 'cs':\n\t\t\tcase 'sk':\n\t\t\t\treturn (1 == number) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2);\n\n\t\t\tcase 'ga':\n\t\t\t\treturn (1 == number) ? 0 : ((2 == number) ? 1 : 2);\n\n\t\t\tcase 'lt':\n\t\t\t\treturn ((1 == number % 10) && (11 != number % 100)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n\t\t\tcase 'sl':\n\t\t\t\treturn (1 == number % 100) ? 0 : ((2 == number % 100) ? 1 : (((3 == number % 100) || (4 == number % 100)) ? 2 : 3));\n\n\t\t\tcase 'mk':\n\t\t\t\treturn (1 == number % 10) ? 0 : 1;\n\n\t\t\tcase 'mt':\n\t\t\t\treturn (1 == number) ? 0 : (((0 == number) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3));\n\n\t\t\tcase 'lv':\n\t\t\t\treturn (0 == number) ? 0 : (((1 == number % 10) && (11 != number % 100)) ? 1 : 2);\n\n\t\t\tcase 'pl':\n\t\t\t\treturn (1 == number) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2);\n\n\t\t\tcase 'cy':\n\t\t\t\treturn (1 == number) ? 0 : ((2 == number) ? 1 : (((8 == number) || (11 == number)) ? 2 : 3));\n\n\t\t\tcase 'ro':\n\t\t\t\treturn (1 == number) ? 0 : (((0 == number) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2);\n\n\t\t\tcase 'ar':\n\t\t\t\treturn (0 == number) ? 0 : ((1 == number) ? 1 : ((2 == number) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))));\n\n\t\t\tdefault:\n\t\t\t\treturn 0;\n\t\t}\n\t}\n};\n\nexport default L10n;\n\n/**\n * Returns the user's locale as a BCP 47 compliant language tag\n *\n * @return {String} locale string\n */\nexport const getCanonicalLocale = () => {\n\tconst locale = getLocale()\n\treturn typeof locale === 'string' ? locale.replace(/_/g, '-') : locale\n}\n\n/**\n * Returns the user's locale\n *\n * @return {String} locale string\n */\nexport const getLocale = () => $('html').data('locale')\n\n/**\n * Returns the user's language\n *\n * @returns {String} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text);\n});\n\n","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nlet token = document.getElementsByTagName('head')[0].getAttribute('data-requesttoken');\nconst observers = []\n\n/**\n * @return {string}\n */\nexport const getToken = () => token\n\n/**\n * @param {Function} observer\n * @return {number}\n */\nexport const subscribe = observer => observers.push(observer)\n\n/**\n * @param {String} newToken\n */\nexport const setToken = newToken => {\n\ttoken = newToken\n\n\tobservers.forEach(o => o(token))\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method\n * @param {string} endpoint\n * @param {Object} [options]\n * @param {Object} [options.data]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @internal\n */\nfunction call (method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options));\n\t\treturn;\n\t}\n\n\toptions = options || {};\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: OC.linkToOCS('apps/provisioning_api/api/v1', 2) + 'config/apps' + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error\n\t});\n}\n\n/**\n * @param {Object} [options]\n * @param {function} [options.success]\n * @since 11.0.0\n */\nexport function getApps (options) {\n\tcall('get', '', options);\n}\n\n/**\n * @param {string} app\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function getKeys (app, options) {\n\tcall('get', '/' + app, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {string|function} defaultValue\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function getValue (app, key, defaultValue, options) {\n\toptions = options || {};\n\toptions.data = {\n\t\tdefaultValue: defaultValue\n\t};\n\n\tcall('get', '/' + app + '/' + key, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {string} value\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function setValue (app, key, value, options) {\n\toptions = options || {};\n\toptions.data = {\n\t\tvalue: value\n\t};\n\n\tcall('post', '/' + app + '/' + key, options);\n}\n\n/**\n * @param {string} app\n * @param {string} key\n * @param {Object} [options]\n * @param {function} [options.success]\n * @param {function} [options.error]\n * @since 11.0.0\n */\nexport function deleteKey (app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options);\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.DOMPurify = factory());\n}(this, (function () { 'use strict';\n\nvar freeze$1 = Object.freeze || function (x) {\n return x;\n};\n\nvar html = freeze$1(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n// SVG\nvar svg = freeze$1(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern']);\n\nvar svgFilters = freeze$1(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\nvar mathMl = freeze$1(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\nvar text = freeze$1(['#text']);\n\nvar freeze$2 = Object.freeze || function (x) {\n return x;\n};\n\nvar html$1 = freeze$2(['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns']);\n\nvar svg$1 = freeze$2(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n\nvar mathMl$1 = freeze$2(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n\nvar xml = freeze$2(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\nvar hasOwnProperty = Object.hasOwnProperty;\nvar setPrototypeOf = Object.setPrototypeOf;\n\nvar _ref$1 = typeof Reflect !== 'undefined' && Reflect;\nvar apply$1 = _ref$1.apply;\n\nif (!apply$1) {\n apply$1 = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\n/* Add properties to a lookup table */\nfunction addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = element.toLowerCase();\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!Object.isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nfunction clone(object) {\n var newObject = {};\n\n var property = void 0;\n for (property in object) {\n if (apply$1(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\nvar seal = Object.seal || function (x) {\n return x;\n};\n\nvar MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nvar ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nvar DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nvar ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nvar IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nvar IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nvar ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g // eslint-disable-line no-control-regex\n);\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar _ref = typeof Reflect !== 'undefined' && Reflect;\nvar apply = _ref.apply;\n\nvar arraySlice = Array.prototype.slice;\nvar freeze = Object.freeze;\n\nvar getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nvar _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html$$1) {\n return html$$1;\n }\n });\n } catch (error) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\n\nfunction createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.0.1';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n var useDOMParser = false;\n var removeSVGAttr = false;\n var removeTitle = false;\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser,\n TrustedTypes = window.TrustedTypes;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(TrustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n getElementsByTagName = _document.getElementsByTagName,\n createDocumentFragment = _document.createDocumentFragment;\n var importNode = originalDocument.importNode;\n\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for jQuery's $() factory? */\n var SAFE_FOR_JQUERY = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify. */\n var RETURN_DOM_IMPORT = false;\n\n /* Try to return a Trusted Type object instead of a string, retrun a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = addToSet({}, ['audio', 'head', 'math', 'script', 'style', 'template', 'svg', 'video']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet({}, cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n DOMPurify.removed.push({ element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (error) {\n node.outerHTML = emptyHTML;\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n DOMPurify.removed.push({\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (error) {\n DOMPurify.removed.push({\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name);\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = dirty.match(/^[\\s]+/);\n leadingWhitespace = matches && matches[0];\n if (leadingWhitespace) {\n dirty = dirty.slice(leadingWhitespace.length);\n }\n }\n\n /* Use DOMParser to workaround Firefox bug (see comment below) */\n if (useDOMParser) {\n try {\n doc = new DOMParser().parseFromString(dirty, 'text/html');\n } catch (error) {}\n }\n\n /* Remove title to fix a mXSS bug in older MS Edge */\n if (removeTitle) {\n addToSet(FORBID_TAGS, ['title']);\n }\n\n /* Otherwise use createHTMLDocument, because DOMParser is unsafe in\n Safari (see comment below) */\n if (!doc || !doc.documentElement) {\n doc = implementation.createHTMLDocument('');\n var _doc = doc,\n body = _doc.body;\n\n body.parentNode.removeChild(body.parentNode.firstElementChild);\n body.outerHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n if (leadingWhitespace) {\n doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n };\n\n // Firefox uses a different parser for innerHTML rather than\n // DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)\n // which means that you *must* use DOMParser, otherwise the output may\n // not be safe if used in a document.write context later.\n //\n // So we feature detect the Firefox bug and use the DOMParser if necessary.\n //\n // MS Edge, in older versions, is affected by an mXSS behavior. The second\n // check tests for the behavior and fixes it if necessary.\n if (DOMPurify.isSupported) {\n (function () {\n try {\n var doc = _initDocument('<svg><p><textarea><img src=\"</textarea><img src=x onerror=1//\">');\n if (doc.querySelector('svg img')) {\n useDOMParser = true;\n }\n } catch (error) {}\n })();\n\n (function () {\n try {\n var doc = _initDocument('<svg></p></svg>');\n if (doc.querySelector('svg p')) {\n removeSVGAttr = true;\n }\n } catch (error) {}\n })();\n\n (function () {\n try {\n var doc = _initDocument('<x/><title></title><img>');\n if (doc.querySelector('title').innerHTML.match(/<\\/title/)) {\n removeTitle = true;\n }\n } catch (error) {}\n })();\n }\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {\n return NodeFilter.FILTER_ACCEPT;\n }, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function') {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(obj) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n hooks[entryPoint].forEach(function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n // eslint-disable-next-line complexity\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = currentNode.nodeName.toLowerCase();\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for black-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') {\n try {\n var htmlToInsert = currentNode.innerHTML;\n currentNode.insertAdjacentHTML('AfterEnd', trustedTypesPolicy ? trustedTypesPolicy.createHTML(htmlToInsert) : htmlToInsert);\n } catch (error) {}\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove in case a noscript/noembed XSS is suspected */\n if (tagName === 'noscript' && currentNode.innerHTML.match(/<\\/noscript/i)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if (tagName === 'noembed' && currentNode.innerHTML.match(/<\\/noembed/i)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Convert markup to cover jQuery behavior */\n if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n if (currentNode.innerHTML) {\n currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '<');\n } else {\n currentNode.innerHTML = currentNode.textContent.replace(/</g, '<');\n }\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = content.replace(MUSTACHE_EXPR$$1, ' ');\n content = content.replace(ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Check for binary attributes */\n // eslint-disable-next-line no-negated-condition\n } else if (!value) {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n } else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var idAttr = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = attr.value.trim();\n lcName = name.toLowerCase();\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Check for possible Chrome mXSS */\n if (removeSVGAttr && value.match(/<\\//)) {\n _forceRemove(currentNode);\n }\n\n /* Remove attribute */\n // Safari (iOS + Mac), last tested v8.0.5, crashes if you try to\n // remove a \"name\" attribute from an <img> tag that has an \"id\"\n // attribute at the time.\n if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) {\n idAttr = attributes.id;\n attributes = apply(arraySlice, attributes, []);\n _removeAttribute('id', currentNode);\n _removeAttribute(name, currentNode);\n if (attributes.indexOf(idAttr) > l) {\n currentNode.setAttribute('id', idAttr.value);\n }\n } else if (\n // This works around a bug in Safari, where input[type=file]\n // cannot be dynamically set after type has been removed\n currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && hookEvent.keepAttr && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {\n continue;\n } else {\n // This avoids a crash in Safari v9.0 with double-ids.\n // The trick is to first set the id to be empty and then to\n // remove the attribute\n if (name === 'id') {\n currentNode.setAttribute(name, '');\n }\n\n _removeAttribute(name, currentNode);\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = value.replace(MUSTACHE_EXPR$$1, ' ');\n value = value.replace(ERB_EXPR$$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n DOMPurify.removed.pop();\n } catch (error) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw new TypeError('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw new TypeError('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n if (IN_PLACE) {\n /* No special handling necessary for in-place sanitization */\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!-->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && RETURN_TRUSTED_TYPE && dirty.indexOf('<') === -1) {\n return trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /* AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs. */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = serializedHTML.replace(MUSTACHE_EXPR$$1, ' ');\n serializedHTML = serializedHTML.replace(ERB_EXPR$$1, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n var lcTag = tag.toLowerCase();\n var lcName = attr.toLowerCase();\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n hooks[entryPoint].push(hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint].pop();\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nvar purify = createDOMPurify();\n\nreturn purify;\n\n})));\n//# sourceMappingURL=purify.js.map\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Namespace for apps\n * @namespace OCA\n */\nexport default {};\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","'use strict';\n\nexports.__esModule = true;\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n column = undefined;\n if (loc) {\n line = loc.start.line;\n column = loc.start.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n } else {\n this.column = column;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSTtBQUNGLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7QUFJdkIsVUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQ3pCLGNBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNwQyxlQUFLLEVBQUUsTUFBTTtBQUNiLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7T0FDdEI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVtYmVyJywgJ3N0YWNrJ107XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgICAgbGluZSxcbiAgICAgIGNvbHVtbjtcbiAgaWYgKGxvYykge1xuICAgIGxpbmUgPSBsb2Muc3RhcnQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcblxuICAgICAgLy8gV29yayBhcm91bmQgaXNzdWUgdW5kZXIgc2FmYXJpIHdoZXJlIHdlIGNhbid0IGRpcmVjdGx5IHNldCB0aGUgY29sdW1uIHZhbHVlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKG5vcCkge1xuICAgIC8qIElnbm9yZSBpZiB0aGUgYnJvd3NlciBpcyB2ZXJ5IHBhcnRpY3VsYXIgKi9cbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV4Y2VwdGlvbjtcbiJdfQ==\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Parses a URL query string into a JS map\n * @param {string} queryString query string in the format param1=1234¶m2=abcde¶m3=xyz\n * @return {Object.<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet parts,\n\t\tpos,\n\t\tcomponents,\n\t\tresult = {},\n\t\tkey,\n\t\tvalue\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tparts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tvar part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1)\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n * @param {Object.<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function (value, key) {\n\t\tvar s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * ownCloud - core\n *\n * This file is licensed under the Affero General Public License version 3 or\n * later. See the COPYING file.\n *\n * @author Bernhard Posselt <dev@bernhard-posselt.com>\n * @copyright Bernhard Posselt 2014\n */\n\nimport $ from 'jquery';\n\nvar dynamicSlideToggleEnabled = false;\n\nconst Apps = {\n\tenableDynamicSlideToggle: function () {\n\t\tdynamicSlideToggleEnabled = true;\n\t}\n};\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function ($el) {\n\tvar $appSidebar = $el || $('#app-sidebar');\n\t$appSidebar.removeClass('disappear').show();\n\t$('#app-content').trigger(new $.Event('appresized'));\n};\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function ($el) {\n\tvar $appSidebar = $el || $('#app-sidebar');\n\t$appSidebar.hide().addClass('disappear');\n\t$('#app-content').trigger(new $.Event('appresized'));\n};\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tvar buttons = $('[data-apps-slide-toggle]');\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings');\n\t}\n\n\t$(document).click(function (event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]');\n\t\t}\n\n\t\tbuttons.each(function (index, button) {\n\n\t\t\tvar areaSelector = $(button).data('apps-slide-toggle');\n\t\t\tvar area = $(areaSelector);\n\n\t\t\tfunction hideArea () {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function () {\n\t\t\t\t\tarea.trigger(new $.Event('hide'));\n\t\t\t\t});\n\t\t\t\tarea.removeClass('opened');\n\t\t\t\t$(button).removeClass('opened');\n\t\t\t}\n\n\t\t\tfunction showArea () {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function () {\n\t\t\t\t\tarea.trigger(new $.Event('show'));\n\t\t\t\t});\n\t\t\t\tarea.addClass('opened');\n\t\t\t\t$(button).addClass('opened');\n\t\t\t\tvar input = $(areaSelector + ' [autofocus]');\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea();\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tvar closest = $(event.target).closest(areaSelector);\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t});\n};\n\nexport default Apps;\n","/*\n * vim: expandtab shiftwidth=4 softtabstop=4\n */\n\n/* global dav */\nif (typeof dav == 'undefined') { dav = {}; };\n\ndav._XML_CHAR_MAP = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": '''\n};\n\ndav._escapeXml = function(s) {\n return s.replace(/[<>&\"']/g, function (ch) {\n return dav._XML_CHAR_MAP[ch];\n });\n};\n\ndav.Client = function(options) {\n var i;\n for(i in options) {\n this[i] = options[i];\n }\n\n};\n\ndav.Client.prototype = {\n\n baseUrl : null,\n\n userName : null,\n\n password : null,\n\n\n xmlNamespaces : {\n 'DAV:' : 'd'\n },\n\n /**\n * Generates a propFind request.\n *\n * @param {string} url Url to do the propfind request on\n * @param {Array} properties List of properties to retrieve.\n * @param {string} depth \"0\", \"1\" or \"infinity\"\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propFind : function(url, properties, depth, headers) {\n\n if(typeof depth === \"undefined\") {\n depth = '0';\n }\n\n // depth header must be a string, in case a number was passed in\n depth = '' + depth;\n\n headers = headers || {};\n\n headers['Depth'] = depth;\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propfind ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(properties[ii]);\n if (this.xmlNamespaces[property.namespace]) {\n body+=' <' + this.xmlNamespaces[property.namespace] + ':' + property.name + ' />\\n';\n } else {\n body+=' <x:' + property.name + ' xmlns:x=\"' + property.namespace + '\" />\\n';\n }\n\n }\n body+=' </d:prop>\\n';\n body+='</d:propfind>';\n\n return this.request('PROPFIND', url, headers, body).then(\n function(result) {\n\n if (depth === '0') {\n return {\n status: result.status,\n body: result.body[0],\n xhr: result.xhr\n };\n } else {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }\n\n }.bind(this)\n );\n\n },\n\n /**\n * Renders a \"d:set\" block for the given properties.\n *\n * @param {Object.<String,String>} properties\n * @return {String} XML \"<d:set>\" block\n */\n _renderPropSet: function(properties) {\n var body = ' <d:set>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(ii);\n var propName;\n var propValue = properties[ii];\n if (this.xmlNamespaces[property.namespace]) {\n propName = this.xmlNamespaces[property.namespace] + ':' + property.name;\n } else {\n propName = 'x:' + property.name + ' xmlns:x=\"' + property.namespace + '\"';\n }\n\n // FIXME: hard-coded for now until we allow properties to\n // specify whether to be escaped or not\n if (propName !== 'd:resourcetype') {\n propValue = dav._escapeXml(propValue);\n }\n body += ' <' + propName + '>' + propValue + '</' + propName + '>\\n';\n }\n body +=' </d:prop>\\n';\n body +=' </d:set>\\n';\n return body;\n },\n\n /**\n * Generates a propPatch request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} properties List of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propPatch : function(url, properties, headers) {\n headers = headers || {};\n\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propertyupdate ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body += '</d:propertyupdate>';\n\n return this.request('PROPPATCH', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Generates a MKCOL request.\n * If attributes are given, it will use an extended MKCOL request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} [properties] list of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n mkcol : function(url, properties, headers) {\n var body = '';\n headers = headers || {};\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n if (properties) {\n body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:mkcol';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body +='</d:mkcol>';\n }\n\n return this.request('MKCOL', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Performs a HTTP request, and returns a Promise\n *\n * @param {string} method HTTP method\n * @param {string} url Relative or absolute url\n * @param {Object} headers HTTP headers as an object.\n * @param {string} body HTTP request body.\n * @return {Promise}\n */\n request : function(method, url, headers, body) {\n\n var self = this;\n var xhr = this.xhrProvider();\n headers = headers || {};\n \n if (this.userName) {\n headers['Authorization'] = 'Basic ' + btoa(this.userName + ':' + this.password);\n // xhr.open(method, this.resolveUrl(url), true, this.userName, this.password);\n }\n xhr.open(method, this.resolveUrl(url), true);\n var ii;\n for(ii in headers) {\n xhr.setRequestHeader(ii, headers[ii]);\n }\n\n // Work around for edge\n if (body === undefined) {\n xhr.send();\n } else {\n xhr.send(body);\n }\n\n return new Promise(function(fulfill, reject) {\n\n xhr.onreadystatechange = function() {\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n var resultBody = xhr.response;\n if (xhr.status === 207) {\n resultBody = self.parseMultiStatus(xhr.response);\n }\n\n fulfill({\n body: resultBody,\n status: xhr.status,\n xhr: xhr\n });\n\n };\n\n xhr.ontimeout = function() {\n\n reject(new Error('Timeout exceeded'));\n\n };\n\n });\n\n },\n\n /**\n * Returns an XMLHttpRequest object.\n *\n * This is in its own method, so it can be easily overridden.\n *\n * @return {XMLHttpRequest}\n */\n xhrProvider : function() {\n\n return new XMLHttpRequest();\n\n },\n\n /**\n * Parses a property node.\n *\n * Either returns a string if the node only contains text, or returns an\n * array of non-text subnodes.\n *\n * @param {Object} propNode node to parse\n * @return {string|Array} text content as string or array of subnodes, excluding text nodes\n */\n _parsePropNode: function(propNode) {\n var content = null;\n if (propNode.childNodes && propNode.childNodes.length > 0) {\n var subNodes = [];\n // filter out text nodes\n for (var j = 0; j < propNode.childNodes.length; j++) {\n var node = propNode.childNodes[j];\n if (node.nodeType === 1) {\n subNodes.push(node);\n }\n }\n if (subNodes.length) {\n content = subNodes;\n }\n }\n\n return content || propNode.textContent || propNode.text || '';\n },\n\n /**\n * Parses a multi-status response body.\n *\n * @param {string} xmlBody\n * @param {Array}\n */\n parseMultiStatus : function(xmlBody) {\n\n var parser = new DOMParser();\n var doc = parser.parseFromString(xmlBody, \"application/xml\");\n\n var resolver = function(foo) {\n var ii;\n for(ii in this.xmlNamespaces) {\n if (this.xmlNamespaces[ii] === foo) {\n return ii;\n }\n }\n }.bind(this);\n\n var responseIterator = doc.evaluate('/d:multistatus/d:response', doc, resolver, XPathResult.ANY_TYPE, null);\n\n var result = [];\n var responseNode = responseIterator.iterateNext();\n\n while(responseNode) {\n\n var response = {\n href : null,\n propStat : []\n };\n\n response.href = doc.evaluate('string(d:href)', responseNode, resolver, XPathResult.ANY_TYPE, null).stringValue;\n\n var propStatIterator = doc.evaluate('d:propstat', responseNode, resolver, XPathResult.ANY_TYPE, null);\n var propStatNode = propStatIterator.iterateNext();\n\n while(propStatNode) {\n var propStat = {\n status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n properties : {},\n };\n\n var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null);\n\n var propNode = propIterator.iterateNext();\n while(propNode) {\n var content = this._parsePropNode(propNode);\n propStat.properties['{' + propNode.namespaceURI + '}' + propNode.localName] = content;\n propNode = propIterator.iterateNext();\n\n }\n response.propStat.push(propStat);\n propStatNode = propStatIterator.iterateNext();\n\n\n }\n\n result.push(response);\n responseNode = responseIterator.iterateNext();\n\n }\n\n return result;\n\n },\n\n /**\n * Takes a relative url, and maps it to an absolute url, using the baseUrl\n *\n * @param {string} url\n * @return {string}\n */\n resolveUrl : function(url) {\n\n // Note: this is rudamentary.. not sure yet if it handles every case.\n if (/^https?:\\/\\//i.test(url)) {\n // absolute\n return url;\n }\n\n var baseParts = this.parseUrl(this.baseUrl);\n if (url.charAt('/')) {\n // Url starts with a slash\n return baseParts.root + url;\n }\n\n // Url does not start with a slash, we need grab the base url right up until the last slash.\n var newUrl = baseParts.root + '/';\n if (baseParts.path.lastIndexOf('/')!==-1) {\n newUrl = newUrl = baseParts.path.subString(0, baseParts.path.lastIndexOf('/')) + '/';\n }\n newUrl+=url;\n return url;\n\n },\n\n /**\n * Parses a url and returns its individual components.\n *\n * @param {String} url\n * @return {Object}\n */\n parseUrl : function(url) {\n\n var parts = url.match(/^(?:([A-Za-z]+):)?(\\/{0,3})([0-9.\\-A-Za-z]+)(?::(\\d+))?(?:\\/([^?#]*))?(?:\\?([^#]*))?(?:#(.*))?$/);\n var result = {\n url : parts[0],\n scheme : parts[1],\n host : parts[3],\n port : parts[4],\n path : parts[5],\n query : parts[6],\n fragment : parts[7],\n };\n result.root =\n result.scheme + '://' +\n result.host +\n (result.port ? ':' + result.port : '');\n\n return result;\n\n },\n\n parseClarkNotation : function(propertyName) {\n\n var result = propertyName.match(/^{([^}]+)}(.*)$/);\n if (!result) {\n return;\n }\n\n return {\n name : result[2],\n namespace : result[1]\n };\n\n }\n\n};\n\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = dav;","/* global nc_pageLoad */\n\n/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit: function () {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this));\n\t\tthis.pageLoadTime = moment.now();\n\t},\n\n\trequiresPasswordConfirmation: function () {\n\t\tvar serverTimeDiff = this.pageLoadTime - (nc_pageLoad * 1000);\n\t\tvar timeSinceLogin = moment.now() - (serverTimeDiff + (nc_lastLogin * 1000));\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000);\n\t},\n\n\t/**\n\t * @param {function} callback\n\t */\n\trequirePasswordConfirmation: function (callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {};\n\t\tvar defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t};\n\n\t\tvar config = _.extend(defaults, options);\n\n\t\tvar self = this;\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction (result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config);\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function () {\n\t\t\t\tvar $dialog = $('.oc-dialog:visible');\n\t\t\t\t$dialog.find('.ui-icon').remove();\n\t\t\t\t$dialog.addClass('password-confirmation');\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tvar $error = $('<p></p>').addClass('msg warning').text(config.error);\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-content').append($error);\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside');\n\n\t\t\t\tvar $buttons = $dialog.find('button');\n\t\t\t\t$buttons.eq(0).hide();\n\t\t\t\t$buttons.eq(1).text(config.confirm);\n\t\t\t});\n\t\t}\n\n\t\tthis.callback = callback;\n\t},\n\n\t_confirmPassword: function (password, config) {\n\t\tvar self = this;\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword: password\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess: function (response) {\n\t\t\t\tnc_lastLogin = response.lastLogin;\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback();\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again');\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config);\n\t\t\t}\n\t\t});\n\t}\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Returns a human readable file size\n * @param {number} size Size in bytes\n * @param {boolean} skipSmallSizes return '< 1 kB' for small files\n * @return {string}\n */\nexport default function humanFileSize (size, skipSmallSizes) {\n\tvar humanList = ['B', 'KB', 'MB', 'GB', 'TB'];\n\t// Calculate Log with base 1024: size = 1024 ** order\n\tvar order = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0;\n\t// Stay in range of the byte sizes that are defined\n\torder = Math.min(humanList.length - 1, order);\n\tvar readableFormat = humanList[order];\n\tvar relativeSize = (size / Math.pow(1024, order)).toFixed(1);\n\tif (skipSmallSizes === true && order === 0) {\n\t\tif (relativeSize !== \"0.0\") {\n\t\t\treturn '< 1 KB';\n\t\t} else {\n\t\t\treturn '0 KB';\n\t\t}\n\t}\n\tif (order < 2) {\n\t\trelativeSize = parseFloat(relativeSize).toFixed(0);\n\t} else if (relativeSize.substr(relativeSize.length - 2, 2) === '.0') {\n\t\trelativeSize = relativeSize.substr(0, relativeSize.length - 2);\n\t} else {\n\t\trelativeSize = parseFloat(relativeSize).toLocaleString(OC.getCanonicalLocale());\n\t}\n\treturn relativeSize + ' ' + readableFormat;\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar VERSION = '4.3.3';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7O0FBQzVCLElBQU0saUNBQWlDLEdBQUcsQ0FBQyxDQUFDOzs7QUFFNUMsSUFBTSxnQkFBZ0IsR0FBRztBQUM5QixHQUFDLEVBQUUsYUFBYTtBQUNoQixHQUFDLEVBQUUsZUFBZTtBQUNsQixHQUFDLEVBQUUsZUFBZTtBQUNsQixHQUFDLEVBQUUsVUFBVTtBQUNiLEdBQUMsRUFBRSxrQkFBa0I7QUFDckIsR0FBQyxFQUFFLGlCQUFpQjtBQUNwQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4zLjMnO1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX1JFVklTSU9OID0gODtcbmV4cG9ydCBjb25zdCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gPSA3O1xuXG5leHBvcnQgY29uc3QgUkVWSVNJT05fQ0hBTkdFUyA9IHtcbiAgMTogJzw9IDEuMC5yYy4yJywgLy8gMS4wLnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24ndCByZXBvcnQgaXRcbiAgMjogJz09IDEuMC4wLXJjLjMnLFxuICAzOiAnPT0gMS4wLjAtcmMuNCcsXG4gIDQ6ICc9PSAxLngueCcsXG4gIDU6ICc9PSAyLjAuMC1hbHBoYS54JyxcbiAgNjogJz49IDIuMC4wLWJldGEuMScsXG4gIDc6ICc+PSA0LjAuMCA8NC4zLjAnLFxuICA4OiAnPj0gNC4zLjAnXG59O1xuXG5jb25zdCBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBsb2dnZXIsXG4gIGxvZzogbG9nZ2VyLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oYEF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIiR7bmFtZX1cIiBhcyB1bmRlZmluZWRgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBsb2cgPSBsb2dnZXIubG9nO1xuXG5leHBvcnQge2NyZWF0ZUZyYW1lLCBsb2dnZXJ9O1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var af = moment.defineLocale('af', {\n months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM : function (input) {\n return /^nm$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Vandag om] LT',\n nextDay : '[Môre om] LT',\n nextWeek : 'dddd [om] LT',\n lastDay : '[Gister om] LT',\n lastWeek : '[Laas] dddd [om] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'oor %s',\n past : '%s gelede',\n s : '\\'n paar sekondes',\n ss : '%d sekondes',\n m : '\\'n minuut',\n mm : '%d minute',\n h : '\\'n uur',\n hh : '%d ure',\n d : '\\'n dag',\n dd : '%d dae',\n M : '\\'n maand',\n MM : '%d maande',\n y : '\\'n jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week : {\n dow : 1, // Maandag is die eerste dag van die week.\n doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n }\n });\n\n return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر'\n ];\n\n var ar = moment.defineLocale('ar', {\n months : months,\n monthsShort : months,\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n ss : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arDz = moment.defineLocale('ar-dz', {\n months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arKw = moment.defineLocale('ar-kw', {\n months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '0': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر'\n ];\n\n var arLy = moment.defineLocale('ar-ly', {\n months : months,\n monthsShort : months,\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n ss : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arMa = moment.defineLocale('ar-ma', {\n months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n };\n\n var arSa = moment.defineLocale('ar-sa', {\n months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n ss : '%d ثانية',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return arSa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var arTn = moment.defineLocale('ar-tn', {\n months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss : '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات'\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return arTn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 1: '-inci',\n 5: '-inci',\n 8: '-inci',\n 70: '-inci',\n 80: '-inci',\n 2: '-nci',\n 7: '-nci',\n 20: '-nci',\n 50: '-nci',\n 3: '-üncü',\n 4: '-üncü',\n 100: '-üncü',\n 6: '-ncı',\n 9: '-uncu',\n 10: '-uncu',\n 30: '-uncu',\n 60: '-ıncı',\n 90: '-ıncı'\n };\n\n var az = moment.defineLocale('az', {\n months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[sabah saat] LT',\n nextWeek : '[gələn həftə] dddd [saat] LT',\n lastDay : '[dünən] LT',\n lastWeek : '[keçən həftə] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s əvvəl',\n s : 'birneçə saniyə',\n ss : '%d saniyə',\n m : 'bir dəqiqə',\n mm : '%d dəqiqə',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir il',\n yy : '%d il'\n },\n meridiemParse: /gecə|səhər|gündüz|axşam/,\n isPM : function (input) {\n return /^(gündüz|axşam)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'gecə';\n } else if (hour < 12) {\n return 'səhər';\n } else if (hour < 17) {\n return 'gündüz';\n } else {\n return 'axşam';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n ordinal : function (number) {\n if (number === 0) { // special case for zero\n return number + '-ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n 'dd': 'дзень_дні_дзён',\n 'MM': 'месяц_месяцы_месяцаў',\n 'yy': 'год_гады_гадоў'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n\n var be = moment.defineLocale('be', {\n months : {\n format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n },\n monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n weekdays : {\n format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n },\n weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., HH:mm',\n LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n },\n calendar : {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'праз %s',\n past : '%s таму',\n s : 'некалькі секунд',\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithPlural,\n hh : relativeTimeWithPlural,\n d : 'дзень',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM : function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var bg = moment.defineLocale('bg', {\n months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Днес в] LT',\n nextDay : '[Утре в] LT',\n nextWeek : 'dddd [в] LT',\n lastDay : '[Вчера в] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[В изминалата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[В изминалия] dddd [в] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'след %s',\n past : 'преди %s',\n s : 'няколко секунди',\n ss : '%d секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дни',\n M : 'месец',\n MM : '%d месеца',\n y : 'година',\n yy : '%d години'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var bm = moment.defineLocale('bm', {\n months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'MMMM [tile] D [san] YYYY',\n LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n },\n calendar : {\n sameDay : '[Bi lɛrɛ] LT',\n nextDay : '[Sini lɛrɛ] LT',\n nextWeek : 'dddd [don lɛrɛ] LT',\n lastDay : '[Kunu lɛrɛ] LT',\n lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s kɔnɔ',\n past : 'a bɛ %s bɔ',\n s : 'sanga dama dama',\n ss : 'sekondi %d',\n m : 'miniti kelen',\n mm : 'miniti %d',\n h : 'lɛrɛ kelen',\n hh : 'lɛrɛ %d',\n d : 'tile kelen',\n dd : 'tile %d',\n M : 'kalo kelen',\n MM : 'kalo %d',\n y : 'san kelen',\n yy : 'san %d'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '১',\n '2': '২',\n '3': '৩',\n '4': '৪',\n '5': '৫',\n '6': '৬',\n '7': '৭',\n '8': '৮',\n '9': '৯',\n '0': '০'\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0'\n };\n\n var bn = moment.defineLocale('bn', {\n months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n longDateFormat : {\n LT : 'A h:mm সময়',\n LTS : 'A h:mm:ss সময়',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm সময়',\n LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n },\n calendar : {\n sameDay : '[আজ] LT',\n nextDay : '[আগামীকাল] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[গতকাল] LT',\n lastWeek : '[গত] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s পরে',\n past : '%s আগে',\n s : 'কয়েক সেকেন্ড',\n ss : '%d সেকেন্ড',\n m : 'এক মিনিট',\n mm : '%d মিনিট',\n h : 'এক ঘন্টা',\n hh : '%d ঘন্টা',\n d : 'এক দিন',\n dd : '%d দিন',\n M : 'এক মাস',\n MM : '%d মাস',\n y : 'এক বছর',\n yy : '%d বছর'\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'রাত' && hour >= 4) ||\n (meridiem === 'দুপুর' && hour < 5) ||\n meridiem === 'বিকাল') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকাল';\n } else {\n return 'রাত';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '༡',\n '2': '༢',\n '3': '༣',\n '4': '༤',\n '5': '༥',\n '6': '༦',\n '7': '༧',\n '8': '༨',\n '9': '༩',\n '0': '༠'\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0'\n };\n\n var bo = moment.defineLocale('bo', {\n months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[དི་རིང] LT',\n nextDay : '[སང་ཉིན] LT',\n nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay : '[ཁ་སང] LT',\n lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ལ་',\n past : '%s སྔན་ལ',\n s : 'ལམ་སང',\n ss : '%d སྐར་ཆ།',\n m : 'སྐར་མ་གཅིག',\n mm : '%d སྐར་མ',\n h : 'ཆུ་ཚོད་གཅིག',\n hh : '%d ཆུ་ཚོད',\n d : 'ཉིན་གཅིག',\n dd : '%d ཉིན་',\n M : 'ཟླ་བ་གཅིག',\n MM : '%d ཟླ་བ',\n y : 'ལོ་གཅིག',\n yy : '%d ལོ'\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n 'mm': 'munutenn',\n 'MM': 'miz',\n 'dd': 'devezh'\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n 'm': 'v',\n 'b': 'v',\n 'd': 'z'\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var br = moment.defineLocale('br', {\n months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h[e]mm A',\n LTS : 'h[e]mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D [a viz] MMMM YYYY',\n LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n },\n calendar : {\n sameDay : '[Hiziv da] LT',\n nextDay : '[Warc\\'hoazh da] LT',\n nextWeek : 'dddd [da] LT',\n lastDay : '[Dec\\'h da] LT',\n lastWeek : 'dddd [paset da] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'a-benn %s',\n past : '%s \\'zo',\n s : 'un nebeud segondennoù',\n ss : '%d eilenn',\n m : 'ur vunutenn',\n mm : relativeTimeWithMutation,\n h : 'un eur',\n hh : '%d eur',\n d : 'un devezh',\n dd : relativeTimeWithMutation,\n M : 'ur miz',\n MM : relativeTimeWithMutation,\n y : 'ur bloaz',\n yy : specialMutationForYears\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n ordinal : function (number) {\n var output = (number === 1) ? 'añ' : 'vet';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ca = moment.defineLocale('ca', {\n months : {\n standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n isFormat: /D[oD]?(\\s)+MMMM/\n },\n monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n monthsParseExact : true,\n weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [de] YYYY',\n ll : 'D MMM YYYY',\n LLL : 'D MMMM [de] YYYY [a les] H:mm',\n lll : 'D MMM YYYY, H:mm',\n LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll : 'ddd D MMM YYYY, H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextDay : function () {\n return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastDay : function () {\n return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'd\\'aquí %s',\n past : 'fa %s',\n s : 'uns segons',\n ss : '%d segons',\n m : 'un minut',\n mm : '%d minuts',\n h : 'una hora',\n hh : '%d hores',\n d : 'un dia',\n dd : '%d dies',\n M : 'un mes',\n MM : '%d mesos',\n y : 'un any',\n yy : '%d anys'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal : function (number, period) {\n var output = (number === 1) ? 'r' :\n (number === 2) ? 'n' :\n (number === 3) ? 'r' :\n (number === 4) ? 't' : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ca;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n break;\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n break;\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months : months,\n monthsShort : monthsShort,\n monthsRegex : monthsRegex,\n monthsShortRegex : monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm',\n l : 'D. M. YYYY'\n },\n calendar : {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'před %s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var cv = moment.defineLocale('cv', {\n months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n },\n calendar : {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L'\n },\n relativeTime : {\n future : function (output) {\n var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n return output + affix;\n },\n past : '%s каялла',\n s : 'пӗр-ик ҫеккунт',\n ss : '%d ҫеккунт',\n m : 'пӗр минут',\n mm : '%d минут',\n h : 'пӗр сехет',\n hh : '%d сехет',\n d : 'пӗр кун',\n dd : '%d кун',\n M : 'пӗр уйӑх',\n MM : '%d уйӑх',\n y : 'пӗр ҫул',\n yy : '%d ҫул'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal : '%d-мӗш',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n weekdaysParseExact : true,\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS : 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n ss: '%d eiliad',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var da = moment.defineLocale('da', {\n months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay : '[i dag kl.] LT',\n nextDay : '[i morgen kl.] LT',\n nextWeek : 'på dddd [kl.] LT',\n lastDay : '[i går kl.] LT',\n lastWeek : '[i] dddd[s kl.] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'få sekunder',\n ss : '%d sekunder',\n m : 'et minut',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dage',\n M : 'en måned',\n MM : '%d måneder',\n y : 'et år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var de = moment.defineLocale('de', {\n months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deAt = moment.defineLocale('de-at', {\n months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n ss : '%d Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'ޖެނުއަރީ',\n 'ފެބްރުއަރީ',\n 'މާރިޗު',\n 'އޭޕްރީލު',\n 'މޭ',\n 'ޖޫން',\n 'ޖުލައި',\n 'އޯގަސްޓު',\n 'ސެޕްޓެމްބަރު',\n 'އޮކްޓޯބަރު',\n 'ނޮވެމްބަރު',\n 'ޑިސެމްބަރު'\n ], weekdays = [\n 'އާދިއްތަ',\n 'ހޯމަ',\n 'އަންގާރަ',\n 'ބުދަ',\n 'ބުރާސްފަތި',\n 'ހުކުރު',\n 'ހޮނިހިރު'\n ];\n\n var dv = moment.defineLocale('dv', {\n months : months,\n monthsShort : months,\n weekdays : weekdays,\n weekdaysShort : weekdays,\n weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n longDateFormat : {\n\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/M/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /މކ|މފ/,\n isPM : function (input) {\n return 'މފ' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'މކ';\n } else {\n return 'މފ';\n }\n },\n calendar : {\n sameDay : '[މިއަދު] LT',\n nextDay : '[މާދަމާ] LT',\n nextWeek : 'dddd LT',\n lastDay : '[އިއްޔެ] LT',\n lastWeek : '[ފާއިތުވި] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ތެރޭގައި %s',\n past : 'ކުރިން %s',\n s : 'ސިކުންތުކޮޅެއް',\n ss : 'd% ސިކުންތު',\n m : 'މިނިޓެއް',\n mm : 'މިނިޓު %d',\n h : 'ގަޑިއިރެއް',\n hh : 'ގަޑިއިރު %d',\n d : 'ދުވަހެއް',\n dd : 'ދުވަސް %d',\n M : 'މަހެއް',\n MM : 'މަސް %d',\n y : 'އަހަރެއް',\n yy : 'އަހަރު %d'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 7, // Sunday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n months : function (momentToFormat, format) {\n if (!momentToFormat) {\n return this._monthsNominativeEl;\n } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM : function (input) {\n return ((input + '').toLowerCase()[0] === 'μ');\n },\n meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendarEl : {\n sameDay : '[Σήμερα {}] LT',\n nextDay : '[Αύριο {}] LT',\n nextWeek : 'dddd [{}] LT',\n lastDay : '[Χθες {}] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse : 'L'\n },\n calendar : function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (isFunction(output)) {\n output = output.apply(mom);\n }\n return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n },\n relativeTime : {\n future : 'σε %s',\n past : '%s πριν',\n s : 'λίγα δευτερόλεπτα',\n ss : '%d δευτερόλεπτα',\n m : 'ένα λεπτό',\n mm : '%d λεπτά',\n h : 'μία ώρα',\n hh : '%d ώρες',\n d : 'μία μέρα',\n dd : '%d μέρες',\n M : 'ένας μήνας',\n MM : '%d μήνες',\n y : 'ένας χρόνος',\n yy : '%d χρόνια'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4st is the first week of the year.\n }\n });\n\n return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enSG = moment.defineLocale('en-SG', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enSG;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enAu = moment.defineLocale('en-au', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enAu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enCa = moment.defineLocale('en-ca', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'YYYY-MM-DD',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enGb = moment.defineLocale('en-gb', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enIe = moment.defineLocale('en-ie', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enIl = moment.defineLocale('en-il', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enNz = moment.defineLocale('en-nz', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var eo = moment.defineLocale('eo', {\n months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D[-a de] MMMM, YYYY',\n LLL : 'D[-a de] MMMM, YYYY HH:mm',\n LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar : {\n sameDay : '[Hodiaŭ je] LT',\n nextDay : '[Morgaŭ je] LT',\n nextWeek : 'dddd [je] LT',\n lastDay : '[Hieraŭ je] LT',\n lastWeek : '[pasinta] dddd [je] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'post %s',\n past : 'antaŭ %s',\n s : 'sekundoj',\n ss : '%d sekundoj',\n m : 'minuto',\n mm : '%d minutoj',\n h : 'horo',\n hh : '%d horoj',\n d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n dd : '%d tagoj',\n M : 'monato',\n MM : '%d monatoj',\n y : 'jaro',\n yy : '%d jaroj'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}a/,\n ordinal : '%da',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var es = moment.defineLocale('es', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex : monthsRegex,\n monthsShortRegex : monthsRegex,\n monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY H:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esDo = moment.defineLocale('es-do', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY h:mm A',\n LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esUs = moment.defineLocale('es-us', {\n months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'MM/DD/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY h:mm A',\n LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return esUs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n 'ss': [number + 'sekundi', number + 'sekundit'],\n 'm' : ['ühe minuti', 'üks minut'],\n 'mm': [number + ' minuti', number + ' minutit'],\n 'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n 'hh': [number + ' tunni', number + ' tundi'],\n 'd' : ['ühe päeva', 'üks päev'],\n 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n 'MM': [number + ' kuu', number + ' kuud'],\n 'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n 'yy': [number + ' aasta', number + ' aastat']\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Täna,] LT',\n nextDay : '[Homme,] LT',\n nextWeek : '[Järgmine] dddd LT',\n lastDay : '[Eile,] LT',\n lastWeek : '[Eelmine] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s pärast',\n past : '%s tagasi',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : '%d päeva',\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return et;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var eu = moment.defineLocale('eu', {\n months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n monthsParseExact : true,\n weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY[ko] MMMM[ren] D[a]',\n LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l : 'YYYY-M-D',\n ll : 'YYYY[ko] MMM D[a]',\n lll : 'YYYY[ko] MMM D[a] HH:mm',\n llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n },\n calendar : {\n sameDay : '[gaur] LT[etan]',\n nextDay : '[bihar] LT[etan]',\n nextWeek : 'dddd LT[etan]',\n lastDay : '[atzo] LT[etan]',\n lastWeek : '[aurreko] dddd LT[etan]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s barru',\n past : 'duela %s',\n s : 'segundo batzuk',\n ss : '%d segundo',\n m : 'minutu bat',\n mm : '%d minutu',\n h : 'ordu bat',\n hh : '%d ordu',\n d : 'egun bat',\n dd : '%d egun',\n M : 'hilabete bat',\n MM : '%d hilabete',\n y : 'urte bat',\n yy : '%d urte'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '۱',\n '2': '۲',\n '3': '۳',\n '4': '۴',\n '5': '۵',\n '6': '۶',\n '7': '۷',\n '8': '۸',\n '9': '۹',\n '0': '۰'\n }, numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0'\n };\n\n var fa = moment.defineLocale('fa', {\n months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar : {\n sameDay : '[امروز ساعت] LT',\n nextDay : '[فردا ساعت] LT',\n nextWeek : 'dddd [ساعت] LT',\n lastDay : '[دیروز ساعت] LT',\n lastWeek : 'dddd [پیش] [ساعت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'در %s',\n past : '%s پیش',\n s : 'چند ثانیه',\n ss : 'ثانیه d%',\n m : 'یک دقیقه',\n mm : '%d دقیقه',\n h : 'یک ساعت',\n hh : '%d ساعت',\n d : 'یک روز',\n dd : '%d روز',\n M : 'یک ماه',\n MM : '%d ماه',\n y : 'یک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal : '%dم',\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n numbersFuture = [\n 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n numbersPast[7], numbersPast[8], numbersPast[9]\n ];\n function translate(number, withoutSuffix, key, isFuture) {\n var result = '';\n switch (key) {\n case 's':\n return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n case 'ss':\n return isFuture ? 'sekunnin' : 'sekuntia';\n case 'm':\n return isFuture ? 'minuutin' : 'minuutti';\n case 'mm':\n result = isFuture ? 'minuutin' : 'minuuttia';\n break;\n case 'h':\n return isFuture ? 'tunnin' : 'tunti';\n case 'hh':\n result = isFuture ? 'tunnin' : 'tuntia';\n break;\n case 'd':\n return isFuture ? 'päivän' : 'päivä';\n case 'dd':\n result = isFuture ? 'päivän' : 'päivää';\n break;\n case 'M':\n return isFuture ? 'kuukauden' : 'kuukausi';\n case 'MM':\n result = isFuture ? 'kuukauden' : 'kuukautta';\n break;\n case 'y':\n return isFuture ? 'vuoden' : 'vuosi';\n case 'yy':\n result = isFuture ? 'vuoden' : 'vuotta';\n break;\n }\n result = verbalNumber(number, isFuture) + ' ' + result;\n return result;\n }\n function verbalNumber(number, isFuture) {\n return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n }\n\n var fi = moment.defineLocale('fi', {\n months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'Do MMMM[ta] YYYY',\n LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n l : 'D.M.YYYY',\n ll : 'Do MMM YYYY',\n lll : 'Do MMM YYYY, [klo] HH.mm',\n llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n },\n calendar : {\n sameDay : '[tänään] [klo] LT',\n nextDay : '[huomenna] [klo] LT',\n nextWeek : 'dddd [klo] LT',\n lastDay : '[eilen] [klo] LT',\n lastWeek : '[viime] dddd[na] [klo] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s päästä',\n past : '%s sitten',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var fo = moment.defineLocale('fo', {\n months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D. MMMM, YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Í dag kl.] LT',\n nextDay : '[Í morgin kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[Í gjár kl.] LT',\n lastWeek : '[síðstu] dddd [kl] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'um %s',\n past : '%s síðani',\n s : 'fá sekund',\n ss : '%d sekundir',\n m : 'ein minuttur',\n mm : '%d minuttir',\n h : 'ein tími',\n hh : '%d tímar',\n d : 'ein dagur',\n dd : '%d dagar',\n M : 'ein mánaður',\n MM : '%d mánaðir',\n y : 'eitt ár',\n yy : '%d ár'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var fr = moment.defineLocale('fr', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n ordinal : function (number, period) {\n switch (period) {\n // TODO: Return 'e' when day of month > 1. Move this case inside\n // block for masculine words below.\n // See https://github.com/moment/moment/issues/3375\n case 'D':\n return number + (number === 1 ? 'er' : '');\n\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var frCa = moment.defineLocale('fr-ca', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal : function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n }\n });\n\n return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var frCh = moment.defineLocale('fr-ch', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n monthsParseExact : true,\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Aujourd’hui à] LT',\n nextDay : '[Demain à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[Hier à] LT',\n lastWeek : 'dddd [dernier à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n ss : '%d secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal : function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n var fy = moment.defineLocale('fy', {\n months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n monthsParseExact : true,\n weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'oer %s',\n past : '%s lyn',\n s : 'in pear sekonden',\n ss : '%d sekonden',\n m : 'ien minút',\n mm : '%d minuten',\n h : 'ien oere',\n hh : '%d oeren',\n d : 'ien dei',\n dd : '%d dagen',\n M : 'ien moanne',\n MM : '%d moannen',\n y : 'ien jier',\n yy : '%d jierren'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n var months = [\n 'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n ];\n\n var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné aig] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d mí',\n y: 'bliain',\n yy: '%d bliain'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ga;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n ];\n\n var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months : months,\n monthsShort : monthsShort,\n monthsParseExact : true,\n weekdays : weekdays,\n weekdaysShort : weekdaysShort,\n weekdaysMin : weekdaysMin,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[An-diugh aig] LT',\n nextDay : '[A-màireach aig] LT',\n nextWeek : 'dddd [aig] LT',\n lastDay : '[An-dè aig] LT',\n lastWeek : 'dddd [seo chaidh] [aig] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ann an %s',\n past : 'bho chionn %s',\n s : 'beagan diogan',\n ss : '%d diogan',\n m : 'mionaid',\n mm : '%d mionaidean',\n h : 'uair',\n hh : '%d uairean',\n d : 'latha',\n dd : '%d latha',\n M : 'mìos',\n MM : '%d mìosan',\n y : 'bliadhna',\n yy : '%d bliadhna'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n ordinal : function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return gd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var gl = moment.defineLocale('gl', {\n months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY H:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextDay : function () {\n return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n lastDay : function () {\n return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n },\n lastWeek : function () {\n return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : function (str) {\n if (str.indexOf('un') === 0) {\n return 'n' + str;\n }\n return 'en ' + str;\n },\n past : 'hai %s',\n s : 'uns segundos',\n ss : '%d segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'unha hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['thodde secondanim', 'thodde second'],\n 'ss': [number + ' secondanim', number + ' second'],\n 'm': ['eka mintan', 'ek minute'],\n 'mm': [number + ' mintanim', number + ' mintam'],\n 'h': ['eka voran', 'ek vor'],\n 'hh': [number + ' voranim', number + ' voram'],\n 'd': ['eka disan', 'ek dis'],\n 'dd': [number + ' disanim', number + ' dis'],\n 'M': ['eka mhoinean', 'ek mhoino'],\n 'MM': [number + ' mhoineanim', number + ' mhoine'],\n 'y': ['eka vorsan', 'ek voros'],\n 'yy': [number + ' vorsanim', number + ' vorsam']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var gomLatn = moment.defineLocale('gom-latn', {\n months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'A h:mm [vazta]',\n LTS : 'A h:mm:ss [vazta]',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY A h:mm [vazta]',\n LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n },\n calendar : {\n sameDay: '[Aiz] LT',\n nextDay: '[Faleam] LT',\n nextWeek: '[Ieta to] dddd[,] LT',\n lastDay: '[Kal] LT',\n lastWeek: '[Fatlo] dddd[,] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s',\n past : '%s adim',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n ordinal : function (number, period) {\n switch (period) {\n // the ordinal 'er' only applies to day of the month\n case 'D':\n return number + 'er';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n },\n meridiemParse: /rati|sokalli|donparam|sanje/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'rati') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'sokalli') {\n return hour;\n } else if (meridiem === 'donparam') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'sanje') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'rati';\n } else if (hour < 12) {\n return 'sokalli';\n } else if (hour < 16) {\n return 'donparam';\n } else if (hour < 20) {\n return 'sanje';\n } else {\n return 'rati';\n }\n }\n });\n\n return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '૧',\n '2': '૨',\n '3': '૩',\n '4': '૪',\n '5': '૫',\n '6': '૬',\n '7': '૭',\n '8': '૮',\n '9': '૯',\n '0': '૦'\n },\n numberMap = {\n '૧': '1',\n '૨': '2',\n '૩': '3',\n '૪': '4',\n '૫': '5',\n '૬': '6',\n '૭': '7',\n '૮': '8',\n '૯': '9',\n '૦': '0'\n };\n\n var gu = moment.defineLocale('gu', {\n months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n monthsParseExact: true,\n weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm વાગ્યે',\n LTS: 'A h:mm:ss વાગ્યે',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n },\n calendar: {\n sameDay: '[આજ] LT',\n nextDay: '[કાલે] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ગઇકાલે] LT',\n lastWeek: '[પાછલા] dddd, LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%s મા',\n past: '%s પેહલા',\n s: 'અમુક પળો',\n ss: '%d સેકંડ',\n m: 'એક મિનિટ',\n mm: '%d મિનિટ',\n h: 'એક કલાક',\n hh: '%d કલાક',\n d: 'એક દિવસ',\n dd: '%d દિવસ',\n M: 'એક મહિનો',\n MM: '%d મહિનો',\n y: 'એક વર્ષ',\n yy: '%d વર્ષ'\n },\n preparse: function (string) {\n return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'રાત') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'સવાર') {\n return hour;\n } else if (meridiem === 'બપોર') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'સાંજ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'રાત';\n } else if (hour < 10) {\n return 'સવાર';\n } else if (hour < 17) {\n return 'બપોર';\n } else if (hour < 20) {\n return 'સાંજ';\n } else {\n return 'રાત';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var he = moment.defineLocale('he', {\n months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [ב]MMMM YYYY',\n LLL : 'D [ב]MMMM YYYY HH:mm',\n LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n l : 'D/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[היום ב־]LT',\n nextDay : '[מחר ב־]LT',\n nextWeek : 'dddd [בשעה] LT',\n lastDay : '[אתמול ב־]LT',\n lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'בעוד %s',\n past : 'לפני %s',\n s : 'מספר שניות',\n ss : '%d שניות',\n m : 'דקה',\n mm : '%d דקות',\n h : 'שעה',\n hh : function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d : 'יום',\n dd : function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M : 'חודש',\n MM : function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y : 'שנה',\n yy : function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n }\n },\n meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM : function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n }\n });\n\n return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var hi = moment.defineLocale('hi', {\n months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n monthsParseExact: true,\n weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm बजे',\n LTS : 'A h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[कल] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[कल] LT',\n lastWeek : '[पिछले] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s में',\n past : '%s पहले',\n s : 'कुछ ही क्षण',\n ss : '%d सेकंड',\n m : 'एक मिनट',\n mm : '%d मिनट',\n h : 'एक घंटा',\n hh : '%d घंटे',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महीने',\n MM : '%d महीने',\n y : 'एक वर्ष',\n yy : '%d वर्ष'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months : {\n format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n },\n monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n function translate(number, withoutSuffix, key, isFuture) {\n var num = number;\n switch (key) {\n case 's':\n return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n case 'ss':\n return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n case 'm':\n return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'mm':\n return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'h':\n return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'hh':\n return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'd':\n return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'dd':\n return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'M':\n return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'MM':\n return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'y':\n return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n case 'yy':\n return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n }\n return '';\n }\n function week(isFuture) {\n return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n }\n\n var hu = moment.defineLocale('hu', {\n months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'YYYY.MM.DD.',\n LL : 'YYYY. MMMM D.',\n LLL : 'YYYY. MMMM D. H:mm',\n LLLL : 'YYYY. MMMM D., dddd H:mm'\n },\n meridiemParse: /de|du/i,\n isPM: function (input) {\n return input.charAt(1).toLowerCase() === 'u';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower === true ? 'de' : 'DE';\n } else {\n return isLower === true ? 'du' : 'DU';\n }\n },\n calendar : {\n sameDay : '[ma] LT[-kor]',\n nextDay : '[holnap] LT[-kor]',\n nextWeek : function () {\n return week.call(this, true);\n },\n lastDay : '[tegnap] LT[-kor]',\n lastWeek : function () {\n return week.call(this, false);\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s múlva',\n past : '%s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var hyAm = moment.defineLocale('hy-am', {\n months : {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n },\n monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY թ.',\n LLL : 'D MMMM YYYY թ., HH:mm',\n LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n },\n calendar : {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s հետո',\n past : '%s առաջ',\n s : 'մի քանի վայրկյան',\n ss : '%d վայրկյան',\n m : 'րոպե',\n mm : '%d րոպե',\n h : 'ժամ',\n hh : '%d ժամ',\n d : 'օր',\n dd : '%d օր',\n M : 'ամիս',\n MM : '%d ամիս',\n y : 'տարի',\n yy : '%d տարի'\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem : function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var id = moment.defineLocale('id', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Besok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kemarin pukul] LT',\n lastWeek : 'dddd [lalu pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lalu',\n s : 'beberapa detik',\n ss : '%d detik',\n m : 'semenit',\n mm : '%d menit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return id;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n case 'ss':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n }\n return result + 'sekúnda';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n },\n calendar : {\n sameDay : '[í dag kl.] LT',\n nextDay : '[á morgun kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[í gær kl.] LT',\n lastWeek : '[síðasta] dddd [kl.] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'eftir %s',\n past : 'fyrir %s síðan',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : 'klukkustund',\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return is;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var it = moment.defineLocale('it', {\n months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : function (s) {\n return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past : '%s fa',\n s : 'alcuni secondi',\n ss : '%d secondi',\n m : 'un minuto',\n mm : '%d minuti',\n h : 'un\\'ora',\n hh : '%d ore',\n d : 'un giorno',\n dd : '%d giorni',\n M : 'un mese',\n MM : '%d mesi',\n y : 'un anno',\n yy : '%d anni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var itCh = moment.defineLocale('it-ch', {\n months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : function (s) {\n return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past : '%s fa',\n s : 'alcuni secondi',\n ss : '%d secondi',\n m : 'un minuto',\n mm : '%d minuti',\n h : 'un\\'ora',\n hh : '%d ore',\n d : 'un giorno',\n dd : '%d giorni',\n M : 'un mese',\n MM : '%d mesi',\n y : 'un anno',\n yy : '%d anni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ja = moment.defineLocale('ja', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日 dddd HH:mm',\n l : 'YYYY/MM/DD',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日(ddd) HH:mm'\n },\n meridiemParse: /午前|午後/i,\n isPM : function (input) {\n return input === '午後';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar : {\n sameDay : '[今日] LT',\n nextDay : '[明日] LT',\n nextWeek : function (now) {\n if (now.week() < this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay : '[昨日] LT',\n lastWeek : function (now) {\n if (this.week() < now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}日/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s後',\n past : '%s前',\n s : '数秒',\n ss : '%d秒',\n m : '1分',\n mm : '%d分',\n h : '1時間',\n hh : '%d時間',\n d : '1日',\n dd : '%d日',\n M : '1ヶ月',\n MM : '%dヶ月',\n y : '1年',\n yy : '%d年'\n }\n });\n\n return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var jv = moment.defineLocale('jv', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /enjing|siyang|sonten|ndalu/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'enjing') {\n return hour;\n } else if (meridiem === 'siyang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'enjing';\n } else if (hours < 15) {\n return 'siyang';\n } else if (hours < 19) {\n return 'sonten';\n } else {\n return 'ndalu';\n }\n },\n calendar : {\n sameDay : '[Dinten puniko pukul] LT',\n nextDay : '[Mbenjang pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kala wingi pukul] LT',\n lastWeek : 'dddd [kepengker pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'wonten ing %s',\n past : '%s ingkang kepengker',\n s : 'sawetawis detik',\n ss : '%d detik',\n m : 'setunggal menit',\n mm : '%d menit',\n h : 'setunggal jam',\n hh : '%d jam',\n d : 'sedinten',\n dd : '%d dinten',\n M : 'sewulan',\n MM : '%d wulan',\n y : 'setaun',\n yy : '%d taun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ka = moment.defineLocale('ka', {\n months : {\n standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n },\n monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays : {\n standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n isFormat: /(წინა|შემდეგ)/\n },\n weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[დღეს] LT[-ზე]',\n nextDay : '[ხვალ] LT[-ზე]',\n lastDay : '[გუშინ] LT[-ზე]',\n nextWeek : '[შემდეგ] dddd LT[-ზე]',\n lastWeek : '[წინა] dddd LT-ზე',\n sameElse : 'L'\n },\n relativeTime : {\n future : function (s) {\n return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n s.replace(/ი$/, 'ში') :\n s + 'ში';\n },\n past : function (s) {\n if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if ((/წელი/).test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n },\n s : 'რამდენიმე წამი',\n ss : '%d წამი',\n m : 'წუთი',\n mm : '%d წუთი',\n h : 'საათი',\n hh : '%d საათი',\n d : 'დღე',\n dd : '%d დღე',\n M : 'თვე',\n MM : '%d თვე',\n y : 'წელი',\n yy : '%d წელი'\n },\n dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal : function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week : {\n dow : 1,\n doy : 7\n }\n });\n\n return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-ші',\n 1: '-ші',\n 2: '-ші',\n 3: '-ші',\n 4: '-ші',\n 5: '-ші',\n 6: '-шы',\n 7: '-ші',\n 8: '-ші',\n 9: '-шы',\n 10: '-шы',\n 20: '-шы',\n 30: '-шы',\n 40: '-шы',\n 50: '-ші',\n 60: '-шы',\n 70: '-ші',\n 80: '-ші',\n 90: '-шы',\n 100: '-ші'\n };\n\n var kk = moment.defineLocale('kk', {\n months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Бүгін сағат] LT',\n nextDay : '[Ертең сағат] LT',\n nextWeek : 'dddd [сағат] LT',\n lastDay : '[Кеше сағат] LT',\n lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ішінде',\n past : '%s бұрын',\n s : 'бірнеше секунд',\n ss : '%d секунд',\n m : 'бір минут',\n mm : '%d минут',\n h : 'бір сағат',\n hh : '%d сағат',\n d : 'бір күн',\n dd : '%d күн',\n M : 'бір ай',\n MM : '%d ай',\n y : 'бір жыл',\n yy : '%d жыл'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n ordinal : function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '១',\n '2': '២',\n '3': '៣',\n '4': '៤',\n '5': '៥',\n '6': '៦',\n '7': '៧',\n '8': '៨',\n '9': '៩',\n '0': '០'\n }, numberMap = {\n '១': '1',\n '២': '2',\n '៣': '3',\n '៤': '4',\n '៥': '5',\n '៦': '6',\n '៧': '7',\n '៨': '8',\n '៩': '9',\n '០': '0'\n };\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /ព្រឹក|ល្ងាច/,\n isPM: function (input) {\n return input === 'ល្ងាច';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ព្រឹក';\n } else {\n return 'ល្ងាច';\n }\n },\n calendar: {\n sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n ss: '%d វិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ'\n },\n dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n ordinal : 'ទី%d',\n preparse: function (string) {\n return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '೧',\n '2': '೨',\n '3': '೩',\n '4': '೪',\n '5': '೫',\n '6': '೬',\n '7': '೭',\n '8': '೮',\n '9': '೯',\n '0': '೦'\n },\n numberMap = {\n '೧': '1',\n '೨': '2',\n '೩': '3',\n '೪': '4',\n '೫': '5',\n '೬': '6',\n '೭': '7',\n '೮': '8',\n '೯': '9',\n '೦': '0'\n };\n\n var kn = moment.defineLocale('kn', {\n months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n monthsParseExact: true,\n weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[ಇಂದು] LT',\n nextDay : '[ನಾಳೆ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ನಿನ್ನೆ] LT',\n lastWeek : '[ಕೊನೆಯ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ನಂತರ',\n past : '%s ಹಿಂದೆ',\n s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n ss : '%d ಸೆಕೆಂಡುಗಳು',\n m : 'ಒಂದು ನಿಮಿಷ',\n mm : '%d ನಿಮಿಷ',\n h : 'ಒಂದು ಗಂಟೆ',\n hh : '%d ಗಂಟೆ',\n d : 'ಒಂದು ದಿನ',\n dd : '%d ದಿನ',\n M : 'ಒಂದು ತಿಂಗಳು',\n MM : '%d ತಿಂಗಳು',\n y : 'ಒಂದು ವರ್ಷ',\n yy : '%d ವರ್ಷ'\n },\n preparse: function (string) {\n return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ರಾತ್ರಿ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n return hour;\n } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ಸಂಜೆ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ರಾತ್ರಿ';\n } else if (hour < 10) {\n return 'ಬೆಳಿಗ್ಗೆ';\n } else if (hour < 17) {\n return 'ಮಧ್ಯಾಹ್ನ';\n } else if (hour < 20) {\n return 'ಸಂಜೆ';\n } else {\n return 'ರಾತ್ರಿ';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n ordinal : function (number) {\n return number + 'ನೇ';\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ko = moment.defineLocale('ko', {\n months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'YYYY.MM.DD.',\n LL : 'YYYY년 MMMM D일',\n LLL : 'YYYY년 MMMM D일 A h:mm',\n LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n l : 'YYYY.MM.DD.',\n ll : 'YYYY년 MMMM D일',\n lll : 'YYYY년 MMMM D일 A h:mm',\n llll : 'YYYY년 MMMM D일 dddd A h:mm'\n },\n calendar : {\n sameDay : '오늘 LT',\n nextDay : '내일 LT',\n nextWeek : 'dddd LT',\n lastDay : '어제 LT',\n lastWeek : '지난주 dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s 후',\n past : '%s 전',\n s : '몇 초',\n ss : '%d초',\n m : '1분',\n mm : '%d분',\n h : '한 시간',\n hh : '%d시간',\n d : '하루',\n dd : '%d일',\n M : '한 달',\n MM : '%d달',\n y : '일 년',\n yy : '%d년'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '일';\n case 'M':\n return number + '월';\n case 'w':\n case 'W':\n return number + '주';\n default:\n return number;\n }\n },\n meridiemParse : /오전|오후/,\n isPM : function (token) {\n return token === '오후';\n },\n meridiem : function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n }\n });\n\n return ko;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n },\n months = [\n 'کانونی دووەم',\n 'شوبات',\n 'ئازار',\n 'نیسان',\n 'ئایار',\n 'حوزەیران',\n 'تەمموز',\n 'ئاب',\n 'ئەیلوول',\n 'تشرینی یەكەم',\n 'تشرینی دووەم',\n 'كانونی یەکەم'\n ];\n\n\n var ku = moment.defineLocale('ku', {\n months : months,\n monthsShort : months,\n weekdays : 'یهكشهممه_دووشهممه_سێشهممه_چوارشهممه_پێنجشهممه_ههینی_شهممه'.split('_'),\n weekdaysShort : 'یهكشهم_دووشهم_سێشهم_چوارشهم_پێنجشهم_ههینی_شهممه'.split('_'),\n weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /ئێواره|بهیانی/,\n isPM: function (input) {\n return /ئێواره/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'بهیانی';\n } else {\n return 'ئێواره';\n }\n },\n calendar : {\n sameDay : '[ئهمرۆ كاتژمێر] LT',\n nextDay : '[بهیانی كاتژمێر] LT',\n nextWeek : 'dddd [كاتژمێر] LT',\n lastDay : '[دوێنێ كاتژمێر] LT',\n lastWeek : 'dddd [كاتژمێر] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'له %s',\n past : '%s',\n s : 'چهند چركهیهك',\n ss : 'چركه %d',\n m : 'یهك خولهك',\n mm : '%d خولهك',\n h : 'یهك كاتژمێر',\n hh : '%d كاتژمێر',\n d : 'یهك ڕۆژ',\n dd : '%d ڕۆژ',\n M : 'یهك مانگ',\n MM : '%d مانگ',\n y : 'یهك ساڵ',\n yy : '%d ساڵ'\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return ku;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-чү',\n 1: '-чи',\n 2: '-чи',\n 3: '-чү',\n 4: '-чү',\n 5: '-чи',\n 6: '-чы',\n 7: '-чи',\n 8: '-чи',\n 9: '-чу',\n 10: '-чу',\n 20: '-чы',\n 30: '-чу',\n 40: '-чы',\n 50: '-чү',\n 60: '-чы',\n 70: '-чи',\n 80: '-чи',\n 90: '-чу',\n 100: '-чү'\n };\n\n var ky = moment.defineLocale('ky', {\n months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Бүгүн саат] LT',\n nextDay : '[Эртең саат] LT',\n nextWeek : 'dddd [саат] LT',\n lastDay : '[Кечээ саат] LT',\n lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ичинде',\n past : '%s мурун',\n s : 'бирнече секунд',\n ss : '%d секунд',\n m : 'бир мүнөт',\n mm : '%d мүнөт',\n h : 'бир саат',\n hh : '%d саат',\n d : 'бир күн',\n dd : '%d күн',\n M : 'бир ай',\n MM : '%d ай',\n y : 'бир жыл',\n yy : '%d жыл'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n ordinal : function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eng Minutt', 'enger Minutt'],\n 'h': ['eng Stonn', 'enger Stonn'],\n 'd': ['een Dag', 'engem Dag'],\n 'M': ['ee Mount', 'engem Mount'],\n 'y': ['ee Joer', 'engem Joer']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n function processFutureTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'a ' + string;\n }\n return 'an ' + string;\n }\n function processPastTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'viru ' + string;\n }\n return 'virun ' + string;\n }\n /**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\n function eifelerRegelAppliesToNumber(number) {\n number = parseInt(number, 10);\n if (isNaN(number)) {\n return false;\n }\n if (number < 0) {\n // Negative Number --> always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10, firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n }\n },\n relativeTime : {\n future : processFutureTime,\n past : processPastTime,\n s : 'e puer Sekonnen',\n ss : '%d Sekonnen',\n m : processRelativeTime,\n mm : '%d Minutten',\n h : processRelativeTime,\n hh : '%d Stonnen',\n d : processRelativeTime,\n dd : '%d Deeg',\n M : processRelativeTime,\n MM : '%d Méint',\n y : processRelativeTime,\n yy : '%d Joer'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var lo = moment.defineLocale('lo', {\n months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar : {\n sameDay : '[ມື້ນີ້ເວລາ] LT',\n nextDay : '[ມື້ອື່ນເວລາ] LT',\n nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ອີກ %s',\n past : '%sຜ່ານມາ',\n s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss : '%d ວິນາທີ' ,\n m : '1 ນາທີ',\n mm : '%d ນາທີ',\n h : '1 ຊົ່ວໂມງ',\n hh : '%d ຊົ່ວໂມງ',\n d : '1 ມື້',\n dd : '%d ມື້',\n M : '1 ເດືອນ',\n MM : '%d ເດືອນ',\n y : '1 ປີ',\n yy : '%d ປີ'\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal : function (number) {\n return 'ທີ່' + number;\n }\n });\n\n return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss' : 'sekundė_sekundžių_sekundes',\n 'm' : 'minutė_minutės_minutę',\n 'mm': 'minutės_minučių_minutes',\n 'h' : 'valanda_valandos_valandą',\n 'hh': 'valandos_valandų_valandas',\n 'd' : 'diena_dienos_dieną',\n 'dd': 'dienos_dienų_dienas',\n 'M' : 'mėnuo_mėnesio_mėnesį',\n 'MM': 'mėnesiai_mėnesių_mėnesius',\n 'y' : 'metai_metų_metus',\n 'yy': 'metai_metų_metus'\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months : {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n },\n monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays : {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n isFormat: /dddd HH:mm/\n },\n weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY [m.] MMMM D [d.]',\n LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l : 'YYYY-MM-DD',\n ll : 'YYYY [m.] MMMM D [d.]',\n lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n },\n calendar : {\n sameDay : '[Šiandien] LT',\n nextDay : '[Rytoj] LT',\n nextWeek : 'dddd LT',\n lastDay : '[Vakar] LT',\n lastWeek : '[Praėjusį] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'po %s',\n past : 'prieš %s',\n s : translateSeconds,\n ss : translate,\n m : translateSingular,\n mm : translate,\n h : translateSingular,\n hh : translate,\n d : translateSingular,\n dd : translate,\n M : translateSingular,\n MM : translate,\n y : translateSingular,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal : function (number) {\n return number + '-oji';\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'h': 'stundas_stundām_stunda_stundas'.split('_'),\n 'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n 'd': 'dienas_dienām_diena_dienas'.split('_'),\n 'dd': 'dienas_dienām_diena_dienas'.split('_'),\n 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'y': 'gada_gadiem_gads_gadi'.split('_'),\n 'yy': 'gada_gadiem_gads_gadi'.split('_')\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY.',\n LL : 'YYYY. [gada] D. MMMM',\n LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n },\n calendar : {\n sameDay : '[Šodien pulksten] LT',\n nextDay : '[Rīt pulksten] LT',\n nextWeek : 'dddd [pulksten] LT',\n lastDay : '[Vakar pulksten] LT',\n lastWeek : '[Pagājušā] dddd [pulksten] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'pēc %s',\n past : 'pirms %s',\n s : relativeSeconds,\n ss : relativeTimeWithPlural,\n m : relativeTimeWithSingular,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithSingular,\n hh : relativeTimeWithPlural,\n d : relativeTimeWithSingular,\n dd : relativeTimeWithPlural,\n M : relativeTimeWithSingular,\n MM : relativeTimeWithPlural,\n y : relativeTimeWithSingular,\n yy : relativeTimeWithPlural\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact : true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mjesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mk = moment.defineLocale('mk', {\n months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Денес во] LT',\n nextDay : '[Утре во] LT',\n nextWeek : '[Во] dddd [во] LT',\n lastDay : '[Вчера во] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'после %s',\n past : 'пред %s',\n s : 'неколку секунди',\n ss : '%d секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дена',\n M : 'месец',\n MM : '%d месеци',\n y : 'година',\n yy : '%d години'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ml = moment.defineLocale('ml', {\n months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm -നു',\n LTS : 'A h:mm:ss -നു',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm -നു',\n LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n },\n calendar : {\n sameDay : '[ഇന്ന്] LT',\n nextDay : '[നാളെ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ഇന്നലെ] LT',\n lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s കഴിഞ്ഞ്',\n past : '%s മുൻപ്',\n s : 'അൽപ നിമിഷങ്ങൾ',\n ss : '%d സെക്കൻഡ്',\n m : 'ഒരു മിനിറ്റ്',\n mm : '%d മിനിറ്റ്',\n h : 'ഒരു മണിക്കൂർ',\n hh : '%d മണിക്കൂർ',\n d : 'ഒരു ദിവസം',\n dd : '%d ദിവസം',\n M : 'ഒരു മാസം',\n MM : '%d മാസം',\n y : 'ഒരു വർഷം',\n yy : '%d വർഷം'\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n }\n });\n\n return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n monthsParseExact : true,\n weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY оны MMMMын D',\n LLL : 'YYYY оны MMMMын D HH:mm',\n LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM : function (input) {\n return input === 'ҮХ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar : {\n sameDay : '[Өнөөдөр] LT',\n nextDay : '[Маргааш] LT',\n nextWeek : '[Ирэх] dddd LT',\n lastDay : '[Өчигдөр] LT',\n lastWeek : '[Өнгөрсөн] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s дараа',\n past : '%s өмнө',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n }\n });\n\n return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture)\n {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's': output = 'काही सेकंद'; break;\n case 'ss': output = '%d सेकंद'; break;\n case 'm': output = 'एक मिनिट'; break;\n case 'mm': output = '%d मिनिटे'; break;\n case 'h': output = 'एक तास'; break;\n case 'hh': output = '%d तास'; break;\n case 'd': output = 'एक दिवस'; break;\n case 'dd': output = '%d दिवस'; break;\n case 'M': output = 'एक महिना'; break;\n case 'MM': output = '%d महिने'; break;\n case 'y': output = 'एक वर्ष'; break;\n case 'yy': output = '%d वर्षे'; break;\n }\n }\n else {\n switch (string) {\n case 's': output = 'काही सेकंदां'; break;\n case 'ss': output = '%d सेकंदां'; break;\n case 'm': output = 'एका मिनिटा'; break;\n case 'mm': output = '%d मिनिटां'; break;\n case 'h': output = 'एका तासा'; break;\n case 'hh': output = '%d तासां'; break;\n case 'd': output = 'एका दिवसा'; break;\n case 'dd': output = '%d दिवसां'; break;\n case 'M': output = 'एका महिन्या'; break;\n case 'MM': output = '%d महिन्यां'; break;\n case 'y': output = 'एका वर्षा'; break;\n case 'yy': output = '%d वर्षां'; break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n monthsParseExact : true,\n weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm वाजता',\n LTS : 'A h:mm:ss वाजता',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm वाजता',\n LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[उद्या] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात्री') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळी') {\n return hour;\n } else if (meridiem === 'दुपारी') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'सायंकाळी') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात्री';\n } else if (hour < 10) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ms = moment.defineLocale('ms', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var msMy = moment.defineLocale('ms-my', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mt = moment.defineLocale('mt', {\n months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Illum fil-]LT',\n nextDay : '[Għada fil-]LT',\n nextWeek : 'dddd [fil-]LT',\n lastDay : '[Il-bieraħ fil-]LT',\n lastWeek : 'dddd [li għadda] [fil-]LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'f’ %s',\n past : '%s ilu',\n s : 'ftit sekondi',\n ss : '%d sekondi',\n m : 'minuta',\n mm : '%d minuti',\n h : 'siegħa',\n hh : '%d siegħat',\n d : 'ġurnata',\n dd : '%d ġranet',\n M : 'xahar',\n MM : '%d xhur',\n y : 'sena',\n yy : '%d sni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '၁',\n '2': '၂',\n '3': '၃',\n '4': '၄',\n '5': '၅',\n '6': '၆',\n '7': '၇',\n '8': '၈',\n '9': '၉',\n '0': '၀'\n }, numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0'\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss : '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်'\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nb = moment.defineLocale('nb', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact : true,\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'noen sekunder',\n ss : '%d sekunder',\n m : 'ett minutt',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dager',\n M : 'en måned',\n MM : '%d måneder',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var ne = moment.defineLocale('ne', {\n months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n monthsParseExact : true,\n weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'Aको h:mm बजे',\n LTS : 'Aको h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, Aको h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[भोलि] LT',\n nextWeek : '[आउँदो] dddd[,] LT',\n lastDay : '[हिजो] LT',\n lastWeek : '[गएको] dddd[,] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sमा',\n past : '%s अगाडि',\n s : 'केही क्षण',\n ss : '%d सेकेण्ड',\n m : 'एक मिनेट',\n mm : '%d मिनेट',\n h : 'एक घण्टा',\n hh : '%d घण्टा',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महिना',\n MM : '%d महिना',\n y : 'एक बर्ष',\n yy : '%d बर्ष'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nn = moment.defineLocale('nn', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s sidan',\n s : 'nokre sekund',\n ss : '%d sekund',\n m : 'eit minutt',\n mm : '%d minutt',\n h : 'ein time',\n hh : '%d timar',\n d : 'ein dag',\n dd : '%d dagar',\n M : 'ein månad',\n MM : '%d månader',\n y : 'eit år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '੧',\n '2': '੨',\n '3': '੩',\n '4': '੪',\n '5': '੫',\n '6': '੬',\n '7': '੭',\n '8': '੮',\n '9': '੯',\n '0': '੦'\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0'\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm ਵਜੇ',\n LTS : 'A h:mm:ss ਵਜੇ',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n },\n calendar : {\n sameDay : '[ਅਜ] LT',\n nextDay : '[ਕਲ] LT',\n nextWeek : '[ਅਗਲਾ] dddd, LT',\n lastDay : '[ਕਲ] LT',\n lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ਵਿੱਚ',\n past : '%s ਪਿਛਲੇ',\n s : 'ਕੁਝ ਸਕਿੰਟ',\n ss : '%d ਸਕਿੰਟ',\n m : 'ਇਕ ਮਿੰਟ',\n mm : '%d ਮਿੰਟ',\n h : 'ਇੱਕ ਘੰਟਾ',\n hh : '%d ਘੰਟੇ',\n d : 'ਇੱਕ ਦਿਨ',\n dd : '%d ਦਿਨ',\n M : 'ਇੱਕ ਮਹੀਨਾ',\n MM : '%d ਮਹੀਨੇ',\n y : 'ਇੱਕ ਸਾਲ',\n yy : '%d ਸਾਲ'\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n function plural(n) {\n return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months : function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (format === '') {\n // Hack: if format empty we know this is used to generate\n // RegExp by moment. Give then back both valid forms of months\n // in RegExp ready format.\n return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : '%s temu',\n s : 'kilka sekund',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : '1 dzień',\n dd : '%d dni',\n M : 'miesiąc',\n MM : translate,\n y : 'rok',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var pt = moment.defineLocale('pt', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ptBr = moment.defineLocale('pt-br', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'poucos segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº'\n });\n\n return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': 'secunde',\n 'mm': 'minute',\n 'hh': 'ore',\n 'dd': 'zile',\n 'MM': 'luni',\n 'yy': 'ani'\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'peste %s',\n past : '%s în urmă',\n s : 'câteva secunde',\n ss : relativeTimeWithPlural,\n m : 'un minut',\n mm : relativeTimeWithPlural,\n h : 'o oră',\n hh : relativeTimeWithPlural,\n d : 'o zi',\n dd : relativeTimeWithPlural,\n M : 'o lună',\n MM : relativeTimeWithPlural,\n y : 'un an',\n yy : relativeTimeWithPlural\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n 'hh': 'час_часа_часов',\n 'dd': 'день_дня_дней',\n 'MM': 'месяц_месяца_месяцев',\n 'yy': 'год_года_лет'\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months : {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n },\n monthsShort : {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n },\n weekdays : {\n standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n },\n weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соотвествует только сокращённым формам\n monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., H:mm',\n LLLL : 'dddd, D MMMM YYYY г., H:mm'\n },\n calendar : {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'через %s',\n past : '%s назад',\n s : 'несколько секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'час',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM : function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر'\n ];\n var days = [\n 'آچر',\n 'سومر',\n 'اڱارو',\n 'اربع',\n 'خميس',\n 'جمع',\n 'ڇنڇر'\n ];\n\n var sd = moment.defineLocale('sd', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[اڄ] LT',\n nextDay : '[سڀاڻي] LT',\n nextWeek : 'dddd [اڳين هفتي تي] LT',\n lastDay : '[ڪالهه] LT',\n lastWeek : '[گزريل هفتي] dddd [تي] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s پوء',\n past : '%s اڳ',\n s : 'چند سيڪنڊ',\n ss : '%d سيڪنڊ',\n m : 'هڪ منٽ',\n mm : '%d منٽ',\n h : 'هڪ ڪلاڪ',\n hh : '%d ڪلاڪ',\n d : 'هڪ ڏينهن',\n dd : '%d ڏينهن',\n M : 'هڪ مهينو',\n MM : '%d مهينا',\n y : 'هڪ سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var se = moment.defineLocale('se', {\n months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'MMMM D. [b.] YYYY',\n LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n },\n calendar : {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s geažes',\n past : 'maŋit %s',\n s : 'moadde sekunddat',\n ss: '%d sekunddat',\n m : 'okta minuhta',\n mm : '%d minuhtat',\n h : 'okta diimmu',\n hh : '%d diimmut',\n d : 'okta beaivi',\n dd : '%d beaivvit',\n M : 'okta mánnu',\n MM : '%d mánut',\n y : 'okta jahki',\n yy : '%d jagit'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'),\n weekdaysMin : 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'a h:mm',\n LTS : 'a h:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY MMMM D',\n LLL : 'YYYY MMMM D, a h:mm',\n LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n },\n calendar : {\n sameDay : '[අද] LT[ට]',\n nextDay : '[හෙට] LT[ට]',\n nextWeek : 'dddd LT[ට]',\n lastDay : '[ඊයේ] LT[ට]',\n lastWeek : '[පසුගිය] dddd LT[ට]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sකින්',\n past : '%sකට පෙර',\n s : 'තත්පර කිහිපය',\n ss : 'තත්පර %d',\n m : 'මිනිත්තුව',\n mm : 'මිනිත්තු %d',\n h : 'පැය',\n hh : 'පැය %d',\n d : 'දිනය',\n dd : 'දින %d',\n M : 'මාසය',\n MM : 'මාස %d',\n y : 'වසර',\n yy : 'වසර %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal : function (number) {\n return number + ' වැනි';\n },\n meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM : function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n }\n });\n\n return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return (n > 1) && (n < 5);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n break;\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n break;\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months : months,\n monthsShort : monthsShort,\n weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pred %s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danes ob] LT',\n nextDay : '[jutri ob] LT',\n\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay : '[včeraj ob] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'čez %s',\n past : 'pred %s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sq = moment.defineLocale('sq', {\n months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem : function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Sot në] LT',\n nextDay : '[Nesër në] LT',\n nextWeek : 'dddd [në] LT',\n lastDay : '[Dje në] LT',\n lastWeek : 'dddd [e kaluar në] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'në %s',\n past : '%s më parë',\n s : 'disa sekonda',\n ss : '%d sekonda',\n m : 'një minutë',\n mm : '%d minuta',\n h : 'një orë',\n hh : '%d orë',\n d : 'një ditë',\n dd : '%d ditë',\n M : 'një muaj',\n MM : '%d muaj',\n y : 'një vit',\n yy : '%d vite'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pre %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay : '[јуче у] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : 'пре %s',\n s : 'неколико секунди',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'дан',\n dd : translator.translate,\n M : 'месец',\n MM : translator.translate,\n y : 'годину',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ss = moment.defineLocale('ss', {\n months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Namuhla nga] LT',\n nextDay : '[Kusasa nga] LT',\n nextWeek : 'dddd [nga] LT',\n lastDay : '[Itolo nga] LT',\n lastWeek : 'dddd [leliphelile] [nga] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'nga %s',\n past : 'wenteka nga %s',\n s : 'emizuzwana lomcane',\n ss : '%d mzuzwana',\n m : 'umzuzu',\n mm : '%d emizuzu',\n h : 'lihora',\n hh : '%d emahora',\n d : 'lilanga',\n dd : '%d emalanga',\n M : 'inyanga',\n MM : '%d tinyanga',\n y : 'umnyaka',\n yy : '%d iminyaka'\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : '%d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sv = moment.defineLocale('sv', {\n months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'för %s sedan',\n s : 'några sekunder',\n ss : '%d sekunder',\n m : 'en minut',\n mm : '%d minuter',\n h : 'en timme',\n hh : '%d timmar',\n d : 'en dag',\n dd : '%d dagar',\n M : 'en månad',\n MM : '%d månader',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'e' :\n (b === 1) ? 'a' :\n (b === 2) ? 'a' :\n (b === 3) ? 'e' : 'e';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sw = moment.defineLocale('sw', {\n months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[leo saa] LT',\n nextDay : '[kesho saa] LT',\n nextWeek : '[wiki ijayo] dddd [saat] LT',\n lastDay : '[jana] LT',\n lastWeek : '[wiki iliyopita] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s baadaye',\n past : 'tokea %s',\n s : 'hivi punde',\n ss : 'sekunde %d',\n m : 'dakika moja',\n mm : 'dakika %d',\n h : 'saa limoja',\n hh : 'masaa %d',\n d : 'siku moja',\n dd : 'masiku %d',\n M : 'mwezi mmoja',\n MM : 'miezi %d',\n y : 'mwaka mmoja',\n yy : 'miaka %d'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '௧',\n '2': '௨',\n '3': '௩',\n '4': '௪',\n '5': '௫',\n '6': '௬',\n '7': '௭',\n '8': '௮',\n '9': '௯',\n '0': '௦'\n }, numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0'\n };\n\n var ta = moment.defineLocale('ta', {\n months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, HH:mm',\n LLLL : 'dddd, D MMMM YYYY, HH:mm'\n },\n calendar : {\n sameDay : '[இன்று] LT',\n nextDay : '[நாளை] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[நேற்று] LT',\n lastWeek : '[கடந்த வாரம்] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s இல்',\n past : '%s முன்',\n s : 'ஒரு சில விநாடிகள்',\n ss : '%d விநாடிகள்',\n m : 'ஒரு நிமிடம்',\n mm : '%d நிமிடங்கள்',\n h : 'ஒரு மணி நேரம்',\n hh : '%d மணி நேரம்',\n d : 'ஒரு நாள்',\n dd : '%d நாட்கள்',\n M : 'ஒரு மாதம்',\n MM : '%d மாதங்கள்',\n y : 'ஒரு வருடம்',\n yy : '%d ஆண்டுகள்'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal : function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem : function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var te = moment.defineLocale('te', {\n months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[నేడు] LT',\n nextDay : '[రేపు] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[నిన్న] LT',\n lastWeek : '[గత] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s లో',\n past : '%s క్రితం',\n s : 'కొన్ని క్షణాలు',\n ss : '%d సెకన్లు',\n m : 'ఒక నిమిషం',\n mm : '%d నిమిషాలు',\n h : 'ఒక గంట',\n hh : '%d గంటలు',\n d : 'ఒక రోజు',\n dd : '%d రోజులు',\n M : 'ఒక నెల',\n MM : '%d నెలలు',\n y : 'ఒక సంవత్సరం',\n yy : '%d సంవత్సరాలు'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n ordinal : '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tet = moment.defineLocale('tet', {\n months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'iha %s',\n past : '%s liuba',\n s : 'minutu balun',\n ss : 'minutu %d',\n m : 'minutu ida',\n mm : 'minutu %d',\n h : 'oras ida',\n hh : 'oras %d',\n d : 'loron ida',\n dd : 'loron %d',\n M : 'fulan ida',\n MM : 'fulan %d',\n y : 'tinan ida',\n yy : 'tinan %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум'\n };\n\n var tg = moment.defineLocale('tg', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Имрӯз соати] LT',\n nextDay : '[Пагоҳ соати] LT',\n lastDay : '[Дирӯз соати] LT',\n nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'баъди %s',\n past : '%s пеш',\n s : 'якчанд сония',\n m : 'як дақиқа',\n mm : '%d дақиқа',\n h : 'як соат',\n hh : '%d соат',\n d : 'як рӯз',\n dd : '%d рӯз',\n M : 'як моҳ',\n MM : '%d моҳ',\n y : 'як сол',\n yy : '%d сол'\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1th is the first week of the year.\n }\n });\n\n return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var th = moment.defineLocale('th', {\n months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n monthsParseExact: true,\n weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY เวลา H:mm',\n LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar : {\n sameDay : '[วันนี้ เวลา] LT',\n nextDay : '[พรุ่งนี้ เวลา] LT',\n nextWeek : 'dddd[หน้า เวลา] LT',\n lastDay : '[เมื่อวานนี้ เวลา] LT',\n lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'อีก %s',\n past : '%sที่แล้ว',\n s : 'ไม่กี่วินาที',\n ss : '%d วินาที',\n m : '1 นาที',\n mm : '%d นาที',\n h : '1 ชั่วโมง',\n hh : '%d ชั่วโมง',\n d : '1 วัน',\n dd : '%d วัน',\n M : '1 เดือน',\n MM : '%d เดือน',\n y : '1 ปี',\n yy : '%d ปี'\n }\n });\n\n return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tlPh = moment.defineLocale('tl-ph', {\n months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'MM/D/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY HH:mm',\n LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n },\n calendar : {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'sa loob ng %s',\n past : '%s ang nakalipas',\n s : 'ilang segundo',\n ss : '%d segundo',\n m : 'isang minuto',\n mm : '%d minuto',\n h : 'isang oras',\n hh : '%d oras',\n d : 'isang araw',\n dd : '%d araw',\n M : 'isang buwan',\n MM : '%d buwan',\n y : 'isang taon',\n yy : '%d taon'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'leS' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'waQ' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'nem' :\n time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'Hu’' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'wen' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'ben' :\n time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n }\n return (word === '') ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n monthsParseExact : true,\n weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L'\n },\n relativeTime : {\n future : translateFuture,\n past : translatePast,\n s : 'puS lup',\n ss : translate,\n m : 'wa’ tup',\n mm : translate,\n h : 'wa’ rep',\n hh : translate,\n d : 'wa’ jaj',\n dd : translate,\n M : 'wa’ jar',\n MM : translate,\n y : 'wa’ DIS',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlh;\n\n})));\n","\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n var suffixes = {\n 1: '\\'inci',\n 5: '\\'inci',\n 8: '\\'inci',\n 70: '\\'inci',\n 80: '\\'inci',\n 2: '\\'nci',\n 7: '\\'nci',\n 20: '\\'nci',\n 50: '\\'nci',\n 3: '\\'üncü',\n 4: '\\'üncü',\n 100: '\\'üncü',\n 6: '\\'ncı',\n 9: '\\'uncu',\n 10: '\\'uncu',\n 30: '\\'uncu',\n 60: '\\'ıncı',\n 90: '\\'ıncı'\n };\n\n var tr = moment.defineLocale('tr', {\n months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[yarın saat] LT',\n nextWeek : '[gelecek] dddd [saat] LT',\n lastDay : '[dün] LT',\n lastWeek : '[geçen] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s önce',\n s : 'birkaç saniye',\n ss : '%d saniye',\n m : 'bir dakika',\n mm : '%d dakika',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir yıl',\n yy : '%d yıl'\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) { // special case for zero\n return number + '\\'ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM [dallas] YYYY',\n LLL : 'D. MMMM [dallas] YYYY HH.mm',\n LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM : function (input) {\n return 'd\\'o' === input.toLowerCase();\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'd\\'o' : 'D\\'O';\n } else {\n return isLower ? 'd\\'a' : 'D\\'A';\n }\n },\n calendar : {\n sameDay : '[oxhi à] LT',\n nextDay : '[demà à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[ieiri à] LT',\n lastWeek : '[sür el] dddd [lasteu à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'osprei %s',\n past : 'ja%s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['viensas secunds', '\\'iensas secunds'],\n 'ss': [number + ' secunds', '' + number + ' secunds'],\n 'm': ['\\'n míut', '\\'iens míut'],\n 'mm': [number + ' míuts', '' + number + ' míuts'],\n 'h': ['\\'n þora', '\\'iensa þora'],\n 'hh': [number + ' þoras', '' + number + ' þoras'],\n 'd': ['\\'n ziua', '\\'iensa ziua'],\n 'dd': [number + ' ziuas', '' + number + ' ziuas'],\n 'M': ['\\'n mes', '\\'iens mes'],\n 'MM': [number + ' mesen', '' + number + ' mesen'],\n 'y': ['\\'n ar', '\\'iens ar'],\n 'yy': [number + ' ars', '' + number + ' ars']\n };\n return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzm = moment.defineLocale('tzm', {\n months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past : 'ⵢⴰⵏ %s',\n s : 'ⵉⵎⵉⴽ',\n ss : '%d ⵉⵎⵉⴽ',\n m : 'ⵎⵉⵏⵓⴺ',\n mm : '%d ⵎⵉⵏⵓⴺ',\n h : 'ⵙⴰⵄⴰ',\n hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d : 'ⴰⵙⵙ',\n dd : '%d oⵙⵙⴰⵏ',\n M : 'ⴰⵢoⵓⵔ',\n MM : '%d ⵉⵢⵢⵉⵔⵏ',\n y : 'ⴰⵙⴳⴰⵙ',\n yy : '%d ⵉⵙⴳⴰⵙⵏ'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzmLatn = moment.defineLocale('tzm-latn', {\n months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dadkh s yan %s',\n past : 'yan %s',\n s : 'imik',\n ss : '%d imik',\n m : 'minuḍ',\n mm : '%d minuḍ',\n h : 'saɛa',\n hh : '%d tassaɛin',\n d : 'ass',\n dd : '%d ossan',\n M : 'ayowr',\n MM : '%d iyyirn',\n y : 'asgas',\n yy : '%d isgasn'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل'\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n 'dd': 'день_дні_днів',\n 'MM': 'місяць_місяці_місяців',\n 'yy': 'рік_роки_років'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n };\n\n if (m === true) {\n return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n 'accusative' :\n ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n 'genitive' :\n 'nominative');\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months : {\n 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n },\n monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY р.',\n LLL : 'D MMMM YYYY р., HH:mm',\n LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n },\n calendar : {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : '%s тому',\n s : 'декілька секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'годину',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'місяць',\n MM : relativeTimeWithPlural,\n y : 'рік',\n yy : relativeTimeWithPlural\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر'\n ];\n var days = [\n 'اتوار',\n 'پیر',\n 'منگل',\n 'بدھ',\n 'جمعرات',\n 'جمعہ',\n 'ہفتہ'\n ];\n\n var ur = moment.defineLocale('ur', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[آج بوقت] LT',\n nextDay : '[کل بوقت] LT',\n nextWeek : 'dddd [بوقت] LT',\n lastDay : '[گذشتہ روز بوقت] LT',\n lastWeek : '[گذشتہ] dddd [بوقت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s بعد',\n past : '%s قبل',\n s : 'چند سیکنڈ',\n ss : '%d سیکنڈ',\n m : 'ایک منٹ',\n mm : '%d منٹ',\n h : 'ایک گھنٹہ',\n hh : '%d گھنٹے',\n d : 'ایک دن',\n dd : '%d دن',\n M : 'ایک ماہ',\n MM : '%d ماہ',\n y : 'ایک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uz = moment.defineLocale('uz', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Бугун соат] LT [да]',\n nextDay : '[Эртага] LT [да]',\n nextWeek : 'dddd [куни соат] LT [да]',\n lastDay : '[Кеча соат] LT [да]',\n lastWeek : '[Утган] dddd [куни соат] LT [да]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Якин %s ичида',\n past : 'Бир неча %s олдин',\n s : 'фурсат',\n ss : '%d фурсат',\n m : 'бир дакика',\n mm : '%d дакика',\n h : 'бир соат',\n hh : '%d соат',\n d : 'бир кун',\n dd : '%d кун',\n M : 'бир ой',\n MM : '%d ой',\n y : 'бир йил',\n yy : '%d йил'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Bugun soat] LT [da]',\n nextDay : '[Ertaga] LT [da]',\n nextWeek : 'dddd [kuni soat] LT [da]',\n lastDay : '[Kecha soat] LT [da]',\n lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Yaqin %s ichida',\n past : 'Bir necha %s oldin',\n s : 'soniya',\n ss : '%d soniya',\n m : 'bir daqiqa',\n mm : '%d daqiqa',\n h : 'bir soat',\n hh : '%d soat',\n d : 'bir kun',\n dd : '%d kun',\n M : 'bir oy',\n MM : '%d oy',\n y : 'bir yil',\n yy : '%d yil'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var vi = moment.defineLocale('vi', {\n months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n monthsParseExact : true,\n weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /sa|ch/i,\n isPM : function (input) {\n return /^ch$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [năm] YYYY',\n LLL : 'D MMMM [năm] YYYY HH:mm',\n LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n l : 'DD/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần rồi lúc] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s tới',\n past : '%s trước',\n s : 'vài giây',\n ss : '%d giây' ,\n m : 'một phút',\n mm : '%d phút',\n h : 'một giờ',\n hh : '%d giờ',\n d : 'một ngày',\n dd : '%d ngày',\n M : 'một tháng',\n MM : '%d tháng',\n y : 'một năm',\n yy : '%d năm'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n monthsParseExact : true,\n weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[T~ódá~ý át] LT',\n nextDay : '[T~ómó~rró~w át] LT',\n nextWeek : 'dddd [át] LT',\n lastDay : '[Ý~ést~érdá~ý át] LT',\n lastWeek : '[L~ást] dddd [át] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'í~ñ %s',\n past : '%s á~gó',\n s : 'á ~féw ~sécó~ñds',\n ss : '%d s~écóñ~ds',\n m : 'á ~míñ~úté',\n mm : '%d m~íñú~tés',\n h : 'á~ñ hó~úr',\n hh : '%d h~óúrs',\n d : 'á ~dáý',\n dd : '%d d~áýs',\n M : 'á ~móñ~th',\n MM : '%d m~óñt~hs',\n y : 'á ~ýéár',\n yy : '%d ý~éárs'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var yo = moment.defineLocale('yo', {\n months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Ònì ni] LT',\n nextDay : '[Ọ̀la ni] LT',\n nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n lastDay : '[Àna ni] LT',\n lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ní %s',\n past : '%s kọjá',\n s : 'ìsẹjú aayá die',\n ss :'aayá %d',\n m : 'ìsẹjú kan',\n mm : 'ìsẹjú %d',\n h : 'wákati kan',\n hh : 'wákati %d',\n d : 'ọjọ́ kan',\n dd : 'ọjọ́ %d',\n M : 'osù kan',\n MM : 'osù %d',\n y : 'ọdún kan',\n yy : 'ọdún %d'\n },\n dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n ordinal : 'ọjọ́ %d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhCn = moment.defineLocale('zh-cn', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日Ah点mm分',\n LLLL : 'YYYY年M月D日ddddAh点mm分',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' ||\n meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s内',\n past : '%s前',\n s : '几秒',\n ss : '%d 秒',\n m : '1 分钟',\n mm : '%d 分钟',\n h : '1 小时',\n hh : '%d 小时',\n d : '1 天',\n dd : '%d 天',\n M : '1 个月',\n MM : '%d 个月',\n y : '1 年',\n yy : '%d 年'\n },\n week : {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhHk = moment.defineLocale('zh-hk', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhTw = moment.defineLocale('zh-tw', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天] LT',\n nextDay : '[明天] LT',\n nextWeek : '[下]dddd LT',\n lastDay : '[昨天] LT',\n lastWeek : '[上]dddd LT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhTw;\n\n})));\n","/* global Backbone, Handlebars, Promise, _ */\n\n/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery';\nimport {Collection, Model, View} from 'backbone';\n\nimport OC from './index';\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function () {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true);\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true);\n\t\t\tthis.set('secondAction', this.get('actions')[0]);\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true);\n\t\t}\n\t}\n});\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n});\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis._collection = options.collection;\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function () {\n\t\tvar self = this;\n\t\tself.$el.html('');\n\t\tself._subViews = [];\n\n\t\tself._collection.forEach(function (contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t});\n\t\t\titem.render();\n\t\t\tself.$el.append(item.$el);\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self);\n\t\t\tself._subViews.push(item);\n\t\t});\n\n\t\treturn self;\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function ($src) {\n\t\tthis._subViews.forEach(function (view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src);\n\t\t});\n\t}\n});\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function (data) {\n\t\treturn this.contactTemplate(data);\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis._model = options.model;\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this);\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function () {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}));\n\t\tthis.delegateEvents();\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'));\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({placement: 'left'});\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({placement: 'left'});\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function () {\n\t\tthis._actionMenuShown = !this._actionMenuShown;\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show();\n\t\t} else {\n\t\t\tthis.$('.menu').hide();\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el);\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function ($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn;\n\t\t}\n\t\tthis._actionMenuShown = false;\n\t\tthis.$('.menu').hide();\n\t}\n});\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function (e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val();\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val());\n\t\t\tthis._searchTerm = searchTerm;\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function (data) {\n\t\treturn this.templates.loading(data);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function (data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function (data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function (data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t);\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis.options = options;\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function (text) {\n\t\tthis.render();\n\t\tthis._contacts = undefined;\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}));\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function () {\n\t\tthis.render();\n\t\tthis._contacts = undefined;\n\t\tthis.$('.content').html(this.errorTemplate());\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function (viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts;\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t});\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t});\n\t\tlist.render();\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}));\n\t\tthis.$('#contactsmenu-contacts').html(list.$el);\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function (data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val();\n\t\tthis.$el.html(this.contentTemplate(data));\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal);\n\t\tthis.$('#contactsmenu-search').focus();\n\t\treturn this;\n\t}\n\n});\n\n/**\n * @param {Object} options\n * @param {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function (options) {\n\tthis.initialize(options);\n};\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function (options) {\n\t\tthis.$el = options.el;\n\t\tthis._$trigger = options.trigger;\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t});\n\t\tthis._view.on('search', function (searchTerm) {\n\t\t\tthis._loadContacts(searchTerm);\n\t\t}, this);\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function () {\n\t\t\tthis._toggleVisibility(true);\n\t\t}.bind(this), true);\n\t\tthis.$el.on('beforeHide', function () {\n\t\t\tthis._toggleVisibility(false);\n\t\t}.bind(this));\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function (show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts();\n\t\t} else {\n\t\t\tthis.$el.html('');\n\t\t\treturn Promise.resolve();\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function (searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts');\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}));\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\t_loadContacts: function (searchTerm) {\n\t\tvar self = this;\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm);\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'));\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}));\n\t\t}\n\t\treturn self._contactsPromise.then(function (data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts);\n\n\t\t\tself._view.showContacts(data, searchTerm);\n\t\t}, function (e) {\n\t\t\tself._view.showError();\n\t\t\tconsole.error('There was an error loading your contacts', e);\n\t\t}).then(function () {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise;\n\t\t}).catch(console.error.bind(this));\n\t}\n};\n\nexport default ContactsMenu;\n","/*!\n * Toastify js 1.6.1\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */\n(function(root, factory) {\n if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Toastify = factory();\n }\n})(this, function(global) {\n // Object initialization\n var Toastify = function(options) {\n // Returning a new init object\n return new Toastify.lib.init(options);\n },\n // Library version\n version = \"1.6.1\";\n\n // Defining the prototype of the object\n Toastify.lib = Toastify.prototype = {\n toastify: version,\n\n constructor: Toastify,\n\n // Initializing the object with required parameters\n init: function(options) {\n // Verifying and validating the input object\n if (!options) {\n options = {};\n }\n\n // Creating the options object\n this.options = {};\n\n this.toastElement = null;\n\n // Validating the options\n this.options.text = options.text || \"Hi there!\"; // Display message\n this.options.duration = options.duration || 3000; // Display duration\n this.options.selector = options.selector; // Parent selector\n this.options.callback = options.callback || function() {}; // Callback after display\n this.options.destination = options.destination; // On-click destination\n this.options.newWindow = options.newWindow || false; // Open destination in new window\n this.options.close = options.close || false; // Show toast close icon\n this.options.gravity = options.gravity == \"bottom\" ? \"toastify-bottom\" : \"toastify-top\"; // toast position - top or bottom\n this.options.positionLeft = options.positionLeft || false; // toast position - left or right\n this.options.position = options.position || ''; // toast position - left or right\n this.options.backgroundColor = options.backgroundColor; // toast background color\n this.options.avatar = options.avatar || \"\"; // img element src - url or a path\n this.options.className = options.className || \"\"; // additional class names for the toast\n this.options.stopOnFocus = options.stopOnFocus === undefined? true: options.stopOnFocus; // stop timeout on focus\n\n // Returning the current object for chaining functions\n return this;\n },\n\n // Building the DOM element\n buildToast: function() {\n // Validating if the options are defined\n if (!this.options) {\n throw \"Toastify is not initialized\";\n }\n\n // Creating the DOM object\n var divElement = document.createElement(\"div\");\n divElement.className = \"toastify on \" + this.options.className;\n\n // Positioning toast to left or right or center\n if (!!this.options.position) {\n divElement.className += \" toastify-\" + this.options.position;\n } else {\n // To be depreciated in further versions\n if (this.options.positionLeft === true) {\n divElement.className += \" toastify-left\";\n console.warn('Property `positionLeft` will be depreciated in further versions. Please use `position` instead.')\n } else {\n // Default position\n divElement.className += \" toastify-right\";\n }\n }\n\n // Assigning gravity of element\n divElement.className += \" \" + this.options.gravity;\n\n if (this.options.backgroundColor) {\n divElement.style.background = this.options.backgroundColor;\n }\n\n // Adding the toast message\n divElement.innerHTML = this.options.text;\n\n if (this.options.avatar !== \"\") {\n var avatarElement = document.createElement(\"img\");\n avatarElement.src = this.options.avatar;\n\n avatarElement.className = \"toastify-avatar\";\n\n if (this.options.position == \"left\" || this.options.positionLeft === true) {\n // Adding close icon on the left of content\n divElement.appendChild(avatarElement);\n } else {\n // Adding close icon on the right of content\n divElement.insertAdjacentElement(\"beforeend\", avatarElement);\n }\n }\n\n // Adding a close icon to the toast\n if (this.options.close === true) {\n // Create a span for close element\n var closeElement = document.createElement(\"span\");\n closeElement.innerHTML = \"✖\";\n\n closeElement.className = \"toast-close\";\n\n // Triggering the removal of toast from DOM on close click\n closeElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n this.removeElement(event.target.parentElement);\n window.clearTimeout(event.target.parentElement.timeOutValue);\n }.bind(this)\n );\n\n // Clear timeout while toast is focused\n if (this.options.stopOnFocus && this.options.duration > 0) {\n const self = this;\n // stop countdown\n divElement.addEventListener(\n \"mouseover\",\n function(event) {\n window.clearTimeout(divElement.timeOutValue);\n }\n )\n // add back the timeout\n divElement.addEventListener(\n \"mouseleave\",\n function() {\n divElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n self.removeElement(divElement);\n },\n self.options.duration\n )\n }\n )\n }\n\n //Calculating screen width\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Adding the close icon to the toast element\n // Display on the right if screen width is less than or equal to 360px\n if ((this.options.position == \"left\" || this.options.positionLeft === true) && width > 360) {\n // Adding close icon on the left of content\n divElement.insertAdjacentElement(\"afterbegin\", closeElement);\n } else {\n // Adding close icon on the right of content\n divElement.appendChild(closeElement);\n }\n }\n\n // Adding an on-click destination path\n if (typeof this.options.destination !== \"undefined\") {\n divElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n if (this.options.newWindow === true) {\n window.open(this.options.destination, \"_blank\");\n } else {\n window.location = this.options.destination;\n }\n }.bind(this)\n );\n }\n\n // Returning the generated element\n return divElement;\n },\n\n // Displaying the toast\n showToast: function() {\n // Creating the DOM object for the toast\n this.toastElement = this.buildToast();\n\n // Getting the root element to with the toast needs to be added\n var rootElement;\n if (typeof this.options.selector === \"undefined\") {\n rootElement = document.body;\n } else {\n rootElement = document.getElementById(this.options.selector);\n }\n\n // Validating if root element is present in DOM\n if (!rootElement) {\n throw \"Root element is not defined\";\n }\n\n // Adding the DOM element\n rootElement.insertBefore(this.toastElement, rootElement.firstChild);\n\n // Repositioning the toasts in case multiple toasts are present\n Toastify.reposition();\n\n if (this.options.duration > 0) {\n this.toastElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n this.removeElement(this.toastElement);\n }.bind(this),\n this.options.duration\n ); // Binding `this` for function invocation\n }\n\n // Supporting function chaining\n return this;\n },\n\n hideToast: function() {\n if (this.toastElement.timeOutValue) {\n clearTimeout(this.toastElement.timeOutValue);\n }\n this.removeElement(this.toastElement);\n },\n\n // Removing the element from the DOM\n removeElement: function(toastElement) {\n // Hiding the element\n // toastElement.classList.remove(\"on\");\n toastElement.className = toastElement.className.replace(\" on\", \"\");\n\n // Removing the element from DOM after transition end\n window.setTimeout(\n function() {\n // Remove the elemenf from the DOM\n toastElement.parentNode.removeChild(toastElement);\n\n // Calling the callback function\n this.options.callback.call(toastElement);\n\n // Repositioning the toasts again\n Toastify.reposition();\n }.bind(this),\n 400\n ); // Binding `this` for function invocation\n },\n };\n\n // Positioning the toasts on the DOM\n Toastify.reposition = function() {\n // Top margins with gravity\n var topLeftOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var topRightOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var offsetSize = {\n top: 15,\n bottom: 15,\n };\n\n // Get all toast messages on the DOM\n var allToasts = document.getElementsByClassName(\"toastify\");\n\n var classUsed;\n\n // Modifying the position of each toast element\n for (var i = 0; i < allToasts.length; i++) {\n // Getting the applied gravity\n if (containsClass(allToasts[i], \"toastify-top\") === true) {\n classUsed = \"toastify-top\";\n } else {\n classUsed = \"toastify-bottom\";\n }\n\n var height = allToasts[i].offsetHeight;\n classUsed = classUsed.substr(9, classUsed.length-1)\n // Spacing between toasts\n var offset = 15;\n\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Show toast in center if screen with less than or qual to 360px\n if (width <= 360) {\n // Setting the position\n allToasts[i].style[classUsed] = offsetSize[classUsed] + \"px\";\n\n offsetSize[classUsed] += height + offset;\n } else {\n if (containsClass(allToasts[i], \"toastify-left\") === true) {\n // Setting the position\n allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + \"px\";\n\n topLeftOffsetSize[classUsed] += height + offset;\n } else {\n // Setting the position\n allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + \"px\";\n\n topRightOffsetSize[classUsed] += height + offset;\n }\n }\n }\n\n // Supporting function chaining\n return this;\n };\n\n function containsClass(elem, yourClass) {\n if (!elem || typeof yourClass !== \"string\") {\n return false;\n } else if (\n elem.className &&\n elem.className\n .trim()\n .split(/\\s+/gi)\n .indexOf(yourClass) > -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n // Setting up the prototype for the init object\n Toastify.lib.init.prototype = Toastify.lib;\n\n // Returning the Toastify function to be assigned to the window object/module\n return Toastify;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar axios_1 = require(\"axios\");\nvar client = axios_1.default.create({\n headers: {\n requesttoken: OC.requestToken\n }\n});\nexports.default = client;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \"<div class=\\\"avatar\\\"></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.hyperlink : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.icon : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.hyperlink : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.icon : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.secondAction : stack1)) != null ? stack1.title : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"\t<span class=\\\"other-actions icon-more\\\"></span>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.actions : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = helpers.hyperlink || (depth0 != null ? depth0.hyperlink : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = helpers.icon || (depth0 != null ? depth0.icon : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression;\n\n return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.avatar : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"<div class=\\\"body\\\">\\n\t<div class=\\\"full-name\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.fullName : stack1), depth0))\n + \"</div>\\n\t<div class=\\\"last-message\\\">\"\n + alias3(alias2(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.lastMessage : stack1), depth0))\n + \"</div>\\n</div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.topAction : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.hasTwoActions : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.hasManyActions : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else {\n var priorKey = undefined;\n\n for (var key in context) {\n if (context.hasOwnProperty(key)) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n }\n }\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field) {\n if (!obj) {\n return obj;\n }\n if (field === 'constructor' && !obj.propertyIsEnumerable(field)) {\n return undefined;\n }\n return obj[field];\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixhQUFPLEdBQUcsQ0FBQztLQUNaO0FBQ0QsUUFBSSxLQUFLLEtBQUssYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9ELGFBQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0QsV0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDbkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9va3VwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uKG9iaiwgZmllbGQpIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgaWYgKGZpZWxkID09PSAnY29uc3RydWN0b3InICYmICFvYmoucHJvcGVydHlJc0VudW1lcmFibGUoZmllbGQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n if (!console[method]) {\n // eslint-disable-line no-console\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var optionsWithHooks = Utils.extend({}, options, { hooks: this.hooks });\n\n var result = env.VM.invokePartial.call(this, partial, context, optionsWithHooks);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, optionsWithHooks);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name) {\n if (!(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj);\n }\n return obj[name];\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n if (depths[i] && depths[i][name] != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n container.helpers = Utils.extend({}, env.helpers, options.helpers);\n\n if (templateSpec.usePartial) {\n container.partials = Utils.extend({}, env.partials, options.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQytELFFBQVE7O3VCQUMxRSxXQUFXOztBQUVwQyxTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7TUFDdkQsZUFBZSwwQkFBb0IsQ0FBQzs7QUFFMUMsTUFBSSxnQkFBZ0IsMkNBQXFDLElBQUksZ0JBQWdCLDJCQUFxQixFQUFFO0FBQ2xHLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFVBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztHQUNoSyxNQUFNOztBQUVMLFVBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztHQUNuRjtDQUNGOztBQUVNLFNBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7OztBQUcxQyxNQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1IsVUFBTSwyQkFBYyxtQ0FBbUMsQ0FBQyxDQUFDO0dBQzFEO0FBQ0QsTUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDdkMsVUFBTSwyQkFBYywyQkFBMkIsR0FBRyxPQUFPLFlBQVksQ0FBQyxDQUFDO0dBQ3hFOztBQUVELGNBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxH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QUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztHQUNyQjtBQUNELFNBQU8sSUFBSSxDQUFDO0NBQ2I7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN6RSxNQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7QUFDaEIsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YsUUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7Q09NUElMRVJfUkVWSVNJT04sIGNyZWF0ZUZyYW1lLCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVN9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge21vdmVIZWxwZXJUb0hvb2tzfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0gfHwgMSxcbiAgICAgICAgY3VycmVudFJldmlzaW9uID0gQ09NUElMRVJfUkVWSVNJT047XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPj0gTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OICYmIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTikge1xuICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgKyBjb21waWxlckluZm9bMV0gKyAnKS4nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc2V1ZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHByZWNvbXBpbGVkIHRlbXBsYXRlcyB3aXRoIGNvbXBpbGVyLXZlcnNpb24gNyAoPDQuMy4wKVxuICBjb25zdCB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjcgPSB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IG9wdGlvbnNXaXRoSG9va3MgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtob29rczogdGhpcy5ob29rc30pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9uc1dpdGhIb29rcyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9uc1dpdGhIb29rcyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGVwdGhzW2ldICYmIGRlcHRoc1tpXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPSBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gJycgKyB0ZW1wbGF0ZVNwZWMubWFpbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIH1cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgZW52LnBhcnRpYWxzLCBvcHRpb25zLnBhcnRpYWxzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZCh7fSwgZW52LmRlY29yYXRvcnMsIG9wdGlvbnMuZGVjb3JhdG9ycyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9IG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fCB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuXG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3BlY1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSAmJiAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihjb250YWluZXIsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSxcbiAgICAgICAgY3VycmVudERlcHRocyk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuXG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiAnJzsgfVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG4iXX0=\n","/* global window */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.loadingText || (depth0 != null ? depth0.loadingText : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.couldNotLoadText || (depth0 != null ? depth0.couldNotLoadText : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = helpers.searchContactsText || (depth0 != null ? depth0.searchContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = helpers.searchContactsText || (depth0 != null ? depth0.searchContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.searchTerm || (depth0 != null ? depth0.searchTerm : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper;\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = helpers.noContactsFoundText || (depth0 != null ? depth0.noContactsFoundText : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = helpers.contactsAppURL || (depth0 != null ? depth0.contactsAppURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.showAllContactsText || (depth0 != null ? depth0.showAllContactsText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.canInstallApp : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = helpers.contactsAppMgmtURL || (depth0 != null ? depth0.contactsAppMgmtURL : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.contactsAppMgmtText || (depth0 != null ? depth0.contactsAppMgmtText : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n return ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.contacts : depth0)) != null ? stack1.length : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.contactsAppEnabled : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});","var map = {\n\t\"./af\": 54,\n\t\"./af.js\": 54,\n\t\"./ar\": 55,\n\t\"./ar-dz\": 56,\n\t\"./ar-dz.js\": 56,\n\t\"./ar-kw\": 57,\n\t\"./ar-kw.js\": 57,\n\t\"./ar-ly\": 58,\n\t\"./ar-ly.js\": 58,\n\t\"./ar-ma\": 59,\n\t\"./ar-ma.js\": 59,\n\t\"./ar-sa\": 60,\n\t\"./ar-sa.js\": 60,\n\t\"./ar-tn\": 61,\n\t\"./ar-tn.js\": 61,\n\t\"./ar.js\": 55,\n\t\"./az\": 62,\n\t\"./az.js\": 62,\n\t\"./be\": 63,\n\t\"./be.js\": 63,\n\t\"./bg\": 64,\n\t\"./bg.js\": 64,\n\t\"./bm\": 65,\n\t\"./bm.js\": 65,\n\t\"./bn\": 66,\n\t\"./bn.js\": 66,\n\t\"./bo\": 67,\n\t\"./bo.js\": 67,\n\t\"./br\": 68,\n\t\"./br.js\": 68,\n\t\"./bs\": 69,\n\t\"./bs.js\": 69,\n\t\"./ca\": 70,\n\t\"./ca.js\": 70,\n\t\"./cs\": 71,\n\t\"./cs.js\": 71,\n\t\"./cv\": 72,\n\t\"./cv.js\": 72,\n\t\"./cy\": 73,\n\t\"./cy.js\": 73,\n\t\"./da\": 74,\n\t\"./da.js\": 74,\n\t\"./de\": 75,\n\t\"./de-at\": 76,\n\t\"./de-at.js\": 76,\n\t\"./de-ch\": 77,\n\t\"./de-ch.js\": 77,\n\t\"./de.js\": 75,\n\t\"./dv\": 78,\n\t\"./dv.js\": 78,\n\t\"./el\": 79,\n\t\"./el.js\": 79,\n\t\"./en-SG\": 80,\n\t\"./en-SG.js\": 80,\n\t\"./en-au\": 81,\n\t\"./en-au.js\": 81,\n\t\"./en-ca\": 82,\n\t\"./en-ca.js\": 82,\n\t\"./en-gb\": 83,\n\t\"./en-gb.js\": 83,\n\t\"./en-ie\": 84,\n\t\"./en-ie.js\": 84,\n\t\"./en-il\": 85,\n\t\"./en-il.js\": 85,\n\t\"./en-nz\": 86,\n\t\"./en-nz.js\": 86,\n\t\"./eo\": 87,\n\t\"./eo.js\": 87,\n\t\"./es\": 88,\n\t\"./es-do\": 89,\n\t\"./es-do.js\": 89,\n\t\"./es-us\": 90,\n\t\"./es-us.js\": 90,\n\t\"./es.js\": 88,\n\t\"./et\": 91,\n\t\"./et.js\": 91,\n\t\"./eu\": 92,\n\t\"./eu.js\": 92,\n\t\"./fa\": 93,\n\t\"./fa.js\": 93,\n\t\"./fi\": 94,\n\t\"./fi.js\": 94,\n\t\"./fo\": 95,\n\t\"./fo.js\": 95,\n\t\"./fr\": 96,\n\t\"./fr-ca\": 97,\n\t\"./fr-ca.js\": 97,\n\t\"./fr-ch\": 98,\n\t\"./fr-ch.js\": 98,\n\t\"./fr.js\": 96,\n\t\"./fy\": 99,\n\t\"./fy.js\": 99,\n\t\"./ga\": 100,\n\t\"./ga.js\": 100,\n\t\"./gd\": 101,\n\t\"./gd.js\": 101,\n\t\"./gl\": 102,\n\t\"./gl.js\": 102,\n\t\"./gom-latn\": 103,\n\t\"./gom-latn.js\": 103,\n\t\"./gu\": 104,\n\t\"./gu.js\": 104,\n\t\"./he\": 105,\n\t\"./he.js\": 105,\n\t\"./hi\": 106,\n\t\"./hi.js\": 106,\n\t\"./hr\": 107,\n\t\"./hr.js\": 107,\n\t\"./hu\": 108,\n\t\"./hu.js\": 108,\n\t\"./hy-am\": 109,\n\t\"./hy-am.js\": 109,\n\t\"./id\": 110,\n\t\"./id.js\": 110,\n\t\"./is\": 111,\n\t\"./is.js\": 111,\n\t\"./it\": 112,\n\t\"./it-ch\": 113,\n\t\"./it-ch.js\": 113,\n\t\"./it.js\": 112,\n\t\"./ja\": 114,\n\t\"./ja.js\": 114,\n\t\"./jv\": 115,\n\t\"./jv.js\": 115,\n\t\"./ka\": 116,\n\t\"./ka.js\": 116,\n\t\"./kk\": 117,\n\t\"./kk.js\": 117,\n\t\"./km\": 118,\n\t\"./km.js\": 118,\n\t\"./kn\": 119,\n\t\"./kn.js\": 119,\n\t\"./ko\": 120,\n\t\"./ko.js\": 120,\n\t\"./ku\": 121,\n\t\"./ku.js\": 121,\n\t\"./ky\": 122,\n\t\"./ky.js\": 122,\n\t\"./lb\": 123,\n\t\"./lb.js\": 123,\n\t\"./lo\": 124,\n\t\"./lo.js\": 124,\n\t\"./lt\": 125,\n\t\"./lt.js\": 125,\n\t\"./lv\": 126,\n\t\"./lv.js\": 126,\n\t\"./me\": 127,\n\t\"./me.js\": 127,\n\t\"./mi\": 128,\n\t\"./mi.js\": 128,\n\t\"./mk\": 129,\n\t\"./mk.js\": 129,\n\t\"./ml\": 130,\n\t\"./ml.js\": 130,\n\t\"./mn\": 131,\n\t\"./mn.js\": 131,\n\t\"./mr\": 132,\n\t\"./mr.js\": 132,\n\t\"./ms\": 133,\n\t\"./ms-my\": 134,\n\t\"./ms-my.js\": 134,\n\t\"./ms.js\": 133,\n\t\"./mt\": 135,\n\t\"./mt.js\": 135,\n\t\"./my\": 136,\n\t\"./my.js\": 136,\n\t\"./nb\": 137,\n\t\"./nb.js\": 137,\n\t\"./ne\": 138,\n\t\"./ne.js\": 138,\n\t\"./nl\": 139,\n\t\"./nl-be\": 140,\n\t\"./nl-be.js\": 140,\n\t\"./nl.js\": 139,\n\t\"./nn\": 141,\n\t\"./nn.js\": 141,\n\t\"./pa-in\": 142,\n\t\"./pa-in.js\": 142,\n\t\"./pl\": 143,\n\t\"./pl.js\": 143,\n\t\"./pt\": 144,\n\t\"./pt-br\": 145,\n\t\"./pt-br.js\": 145,\n\t\"./pt.js\": 144,\n\t\"./ro\": 146,\n\t\"./ro.js\": 146,\n\t\"./ru\": 147,\n\t\"./ru.js\": 147,\n\t\"./sd\": 148,\n\t\"./sd.js\": 148,\n\t\"./se\": 149,\n\t\"./se.js\": 149,\n\t\"./si\": 150,\n\t\"./si.js\": 150,\n\t\"./sk\": 151,\n\t\"./sk.js\": 151,\n\t\"./sl\": 152,\n\t\"./sl.js\": 152,\n\t\"./sq\": 153,\n\t\"./sq.js\": 153,\n\t\"./sr\": 154,\n\t\"./sr-cyrl\": 155,\n\t\"./sr-cyrl.js\": 155,\n\t\"./sr.js\": 154,\n\t\"./ss\": 156,\n\t\"./ss.js\": 156,\n\t\"./sv\": 157,\n\t\"./sv.js\": 157,\n\t\"./sw\": 158,\n\t\"./sw.js\": 158,\n\t\"./ta\": 159,\n\t\"./ta.js\": 159,\n\t\"./te\": 160,\n\t\"./te.js\": 160,\n\t\"./tet\": 161,\n\t\"./tet.js\": 161,\n\t\"./tg\": 162,\n\t\"./tg.js\": 162,\n\t\"./th\": 163,\n\t\"./th.js\": 163,\n\t\"./tl-ph\": 164,\n\t\"./tl-ph.js\": 164,\n\t\"./tlh\": 165,\n\t\"./tlh.js\": 165,\n\t\"./tr\": 166,\n\t\"./tr.js\": 166,\n\t\"./tzl\": 167,\n\t\"./tzl.js\": 167,\n\t\"./tzm\": 168,\n\t\"./tzm-latn\": 169,\n\t\"./tzm-latn.js\": 169,\n\t\"./tzm.js\": 168,\n\t\"./ug-cn\": 170,\n\t\"./ug-cn.js\": 170,\n\t\"./uk\": 171,\n\t\"./uk.js\": 171,\n\t\"./ur\": 172,\n\t\"./ur.js\": 172,\n\t\"./uz\": 173,\n\t\"./uz-latn\": 174,\n\t\"./uz-latn.js\": 174,\n\t\"./uz.js\": 173,\n\t\"./vi\": 175,\n\t\"./vi.js\": 175,\n\t\"./x-pseudo\": 176,\n\t\"./x-pseudo.js\": 176,\n\t\"./yo\": 177,\n\t\"./yo.js\": 177,\n\t\"./zh-cn\": 178,\n\t\"./zh-cn.js\": 178,\n\t\"./zh-hk\": 179,\n\t\"./zh-hk.js\": 179,\n\t\"./zh-tw\": 180,\n\t\"./zh-tw.js\": 180\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 221;","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n // Only Node.JS has a process variable that is of [[Class]] process\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach([\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n 'socketPath'\n ], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get';\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","/*\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport Axios from 'nextcloud-axios'\n\nimport OC from './OC/index'\n\nconst url = `${OC.getRootPath()}/status.php`\n\nconst check = () => {\n\tconsole.info('checking the Nextcloud maintenance status')\n\tAxios.get(url)\n\t\t.then(resp => resp.data)\n\t\t.then(status => {\n\t\t\tif (status.maintenance === false) {\n\t\t\t\tconsole.info('Nextcloud is not in maintenance mode anymore -> reloading')\n\n\t\t\t\twindow.location.reload()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconsole.info('Nextcloud is still in maintenance mode')\n\n\t\t\t// Wait 20sec before the next request\n\t\t\tsetTimeout(check, 20 * 1000);\n\t\t})\n\t\t.catch(console.error.bind(this))\n};\n\n// Off we go!\ncheck();\n"],"sourceRoot":""}
\ No newline at end of file |