{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/thirdParty/bootstrap.js","webpack:///./node_modules/bootstrap/js/src/alert.js","webpack:///./node_modules/bootstrap/js/src/carousel.js","webpack:///./node_modules/bootstrap/js/src/collapse.js","webpack:///./node_modules/bootstrap/js/src/modal.js","webpack:///./node_modules/bootstrap/js/src/scrollspy.js","webpack:///./node_modules/bootstrap/js/src/tab.js","webpack:///(webpack)/buildin/global.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/spinner.js","webpack:///./cartridges/app_project/cartridge/client/default/js/login.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/wishlist.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/formValidation.js","webpack:///./cartridges/int_mf_tealium/cartridge/client/default/js/tealiumEvents.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./node_modules/swiper8/swiper-bundle.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/clientSideValidation.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/account.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/errors-maintenance.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/headerSearchBar.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/miniCart.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/registration.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/registration/registration.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./node_modules/bootstrap/js/src/util.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/addToCartValidation.js","webpack:///./cartridges/app_project/cartridge/client/default/js/login/login.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/fitguide.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./cartridges/app_project/cartridge/client/default/js/util.js","webpack:///./node_modules/gsap/dist/gsap.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/components/customSelect.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/notifyWhenAvailable.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/utils.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/date.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/date-format.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/event.js","webpack:///./node_modules/vanillajs-datepicker/js/i18n/base-locales.js","webpack:///./node_modules/vanillajs-datepicker/js/options/defaultOptions.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/dom.js","webpack:///./node_modules/vanillajs-datepicker/js/options/processOptions.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/calendarWeeksTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/View.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/DaysView.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/YearsView.js","webpack:///./node_modules/vanillajs-datepicker/js/events/functions.js","webpack:///./node_modules/vanillajs-datepicker/js/events/pickerListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/Picker.js","webpack:///./node_modules/vanillajs-datepicker/js/events/inputFieldListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/events/otherListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/Datepicker.js","webpack:///./cartridges/app_project/cartridge/client/default/js/datepicker.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/errorNotification.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/main.js","webpack:///./node_modules/imagesloaded/imagesloaded.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/components/search.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/benefitBar.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/tile.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/components/cookiePopup.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/return/return.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.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","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","isArrayLike","length","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","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","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","require","NAME","EVENT_KEY","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","element","_classCallCheck","_element","config","$element","alertInstance","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","Util","getSelectorFromElement","querySelector","closeEvent","_this","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","_destroyElement","emulateTransitionEnd","_handleDismiss","_jQueryInterface","Constructor","DATA_KEY","Default","keyboard","slide","pause","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","Selector","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","Boolean","PointerEvent","MSPointerEvent","_addEventListeners","_objectSpread","_typeof","action","ride","cycle","slideIndex","_slide","triggerTransitionEnd","clearInterval","setInterval","visibilityState","nextWhenVisible","activeIndex","_getItemIndex","direction","typeCheckConfig","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","_handleSwipe","classList","move","tagName","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","eventDirectionName","targetIndex","fromIndex","slideEvent","from","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","isCycling","_triggerSlideEvent","_setActiveIndicatorElement","slidEvent","reflow","nextElementInterval","defaultInterval","_dataApiClickHandler","carousels","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","$this","actives","activesData","startEvent","_getDimension","setTransitioning","capitalizedDimension","scrollSize","triggerArrayLength","isTransitioning","isElement","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","showEvent","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","hideEvent","transition","_hideModal","forEach","htmlElement","Node","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","handleUpdate","_this7","_resetAdjustments","_resetScrollbar","_this8","backdropTransitionDuration","callbackRemove","_removeBackdrop","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","innerWidth","_getScrollbarWidth","_this9","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","scrollDiv","scrollbarWidth","clientWidth","_this10","ACTIVATE","SCROLL","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","getUID","innerHeight","maxScroll","_getOffsetHeight","_activate","_clear","queries","$link","scrollSpys","$spy","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","g","Function","spinner","processInclude","isMargiela","dataset","sitebrand","searchParams","URLSearchParams","search","journey","response2","status2","xhr2","addToCartValidation","isJilSander","isMarni","customSelect","handleResponse","nonvisualHint","showAriaHint","$quantity","listIsEmpty","modalpid","pid","CustomEvent","icon","linkCart","linkWishlist","dispatchEvent","hideErrorMessage","form","errorContainer","addToCartFromWishlist","globalAddToCartURL","pidInput","quantity","responseData","privateSalesError","isMobile","showErrorMessage","quantityTotal","reload","removeItem","bindAddToCart","wishlistSelectChange","parentForm","btnVal","ariaSelected","checkValidity","product","masterID","targetForm","productTile","tileImage","swipeableImages","large","images","urlLarge","modelFabricColorProductURl","wishlistProductNameForTile","tileBody","price","info","insertAdjacentHTML","price2","variationGroupPrice","variationAttributes","attribute","attributeId","colorsBox","color","HEXColor","backgroudColor","displayValue","ws","attributeSelect","outerHTML","selectable","notavailable","updateDisabledOptions","privateSalesSpan","isPrivateSalesProduct","userCustomerGroupsUrl","checkPrivateSales","isUserAuthenticated","customerGroups","log","addToCartText","notifyAndAddToCart","available","showBackInStockNotification","$container","notifyWhenAvailableHtml","isSelectedSize","isOrderable","populateTile","decreaseWishlistCounter","qty","displayErrorMessage","$elementAppendTo","renderNewPageOfItems","pageNumber","publicView","listUUID","account","scrollPosition","newPageNumber","loadScript","$privateSales","privateSalesCustomerGroups","privateSalesText","privateSalesTextLoggedIn","isCustomerAllowed","productKey","productValue","entries","customerKey","customerValue","loginRemoteContent","bindCartRecommendations","actionPid","addToWishlist","isActiveWishList","$button","shouldValidate","$alertContainer","$wrapperPdp","resetWrapperStyles","dismissalTimeout","$productContainer","optionId","optionVal","wishlistErrorMessage","addToWishListError","addToWishListErrorText","addToWishListErrorMessage","wishlistCountOfItems","innerText","label","removeFromWishlist","$elToAppend","backToAccountLink","products","$elToAppendWL","addAllToCart","addToCartUrl","pidsObj","stringify","currentQty","addAllProductsFromWishList","updateSelectAttr","formElement","payload","fields","feedbackElement","$body","$document","utagExists","utag","refreshCartData","sfcc_urls","refresh_utag_basket","copyResponseData","getParameterByName","paramName","decodeURIComponent","getVariationValue","variation","addProductData","page_type","product_id","utag_data","product_name","product_season","product_newin","product_category","product_color","product_waist","product_length","product_size","product_unit_price","product_old_price","product_sale_price","product_net_price","addCartData","product_quantity","product_shipping_type","order_currency","order_track_id","utagData","newsletterEventTrigger","gender","page_name","store_country","event_name","link","loadMoreProduct","nodeList","arrayValue","mergedArray","concatUtagValues","pageNewsletter","genders","isMultipleGender","footerNewsletter","video","$video","video_title","video_time","track","PLPUpdateData","activePLP","active_plp","PDPUpdateData","activePDP","active_pdp","product_sku","addToCart","page_context_type","backInStock","PDPAddToWishlist","productSetIDs","storeLocatorFind","storeLocatorMyLocation","pmin","pmax","subArray","checkoutStages","stage","page_name_onload","login","register","fastCheckout","cartType","buttonPosition","cart_type","cartModifyModalOpen","cartModifyModalConfirm","cartRemoveProduct","cartMoveToPickup","cartShipItem","cartStoreDialogOpen","cartStoreChanged","helpOrderDetails","createReturnSteps","product_return_type","orderID","URL","updateCustomerAttributes","customerProfileAttributes","updateCartAndWishlist","persist_wishlist","total_with_vat","currency","persist_cart","total_without_vat","setListViewType","viewType","list_view_type","searchOpen","searchTypeKeyword","names","skus","suggestions","productName","searchProductClick","ariaLabel","sku","searchSend","searchResultsPage","setTabNextFocus","focusParams","firstFocusableEl","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","nextToLastElementSelector","linkElements","isObject$1","extend$1","ssrDocument","createEvent","createElementNS","importNode","hostname","origin","pathname","getDocument","ssrWindow","userAgent","history","screen","matchMedia","getWindow","Dom7","items","super","__proto__","makeReactive","arrayFlat","res","arrayFilter","toCreate","tempParent","uniqueArray","arrayUnique","Methods","_len","_len2","_key2","_len4","_key4","_len3","_key3","attrName","transform","_len5","_key5","eventType","listener","capture","handleLiveEvent","eventData","dom7EventData","k","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","_len6","_key6","dom7proxy","_len9","_key9","dataIndex","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","outerHeight","clientTop","clientLeft","scrollY","scrollX","compareWith","child","previousSibling","returnIndex","newChild","tempDiv","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","getComputedStyle$1","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isObject","isNode","HTMLElement","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","wrapperEl","scrollSnapType","cancelAnimationFrame","cssModeFrameID","isOutOfBound","getTime","min","easeProgress","currentPosition","deviceCached","browser","getSupport","smoothScroll","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","methodName","eventsEmitter","priority","eventsListeners","destroyed","onceHandler","__emitterProxy","eventsAnyListeners","eventHandler","transitionEmit","runCallbacks","previousIndex","emit","onTouchStart","touchEventsData","enabled","animating","preventInteractionOnTransition","cssMode","loop","loopFix","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","assign","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","rtlTranslate","rtl","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","touchEndTime","timeDiff","pathTree","composedPath","updateClickedSlide","lastClickTime","currentPos","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","rewind","isBeginning","virtual","slides","isEnd","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","snapGrid","updateSlides","slidesPerView","centeredSlides","autoplay","running","paused","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","translatesDiff","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","passive","cancel","updateOnWindowResize","isGridEnabled","grid","rows","defaults","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","update","$el","Number","size","getDirectionLabel","getDirectionPropertyValue","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","gridEnabled","slideSize","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","boxSizing","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","wasBeginning","wasEnd","realIndex","activeSlide","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","initialized","slideFound","clickedSlide","clickedIndex","byController","x","y","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionStart","indexAsNumber","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","resultClasses","prepareClasses","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","Image","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","__modules__","mod","extendParams","swiperParams","passedParams","eventName","onAny","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","getSlideClasses","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","wrapper","mount","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","createElementIfNotDefined","checkProps","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","force","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","previousOffset","slidesAfter","slidesBefore","onRendered","lazy","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","cachedIndex","$cachedEl","cachedElIndex","kc","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","mousewheel","releaseOnEdges","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","sticky","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","destroy","hideOnClick","hiddenClass","targetEl","pagination","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","scrollElementWidth","scrollElementHeight","LinearSpline","binarySearch","guess","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handleFocus","includes","isActive","isVisible","$containerEl","repeat","live","addElLive","updateNavigation","bulletEl","updatePagination","replaceState","paths","slugify","getPathValues","urlOverride","pathArray","part","setHistory","currentState","pushState","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","waitForTransition","onVisibilityChange","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","formCleared","triggerEdgeValidation","scrollToError","$form","validateReCaptcha","$response","valid","validateForm","validity","clearFormErrors","attachNoBubbleEvents","attachTimeout","setCustomValidity","fieldMessages","formValidationMessages","validationMessage","clearFormFieldErrors","noBubbleEvents","additionalMessagesStr","additionalMessages","$formMessages","buttonClick","focusOut","cleanString","onChange","handleDateChange","scrollOnError","updatePostalCodePattern","postalCodeElementID","$postalCode","postalCodeRegexp","at","be","bg","dk","gr","hu","lv","lt","lu","nl","no","pl","pt","ro","ru","sk","si","es","se","gb","us","ca","cz","countryCode","regexp","reCaptchaOnChange","functions","reAttachNoBubbleEvents","section","elementId","parentElement","parentClass","orderAccordion","setClass","classToCheck","classToSet","headerSearchComponent","scrollDistance","closeSize","headerHeight","lastoffset","showOrHide","op","minicart","mainOverlay","boipisItem","productId","updateMiniCartUrl","updateMiniCart","totalHeight","heightContent","fastCheckoutUrl","fastCheckoutData","fastPayment","prepandPaypalminicart","prepandpaypalminicart","scriptUrl","scripturl","remoteContent","formValidation","clientSideValidation","$registrationForm","initAgeValidation","post","redirectUrl","responseJSON","$birthdateInput","today","maxDate","getFullYear","getMonth","getDate","toISOString","handlePopups","$aTag","$relevantSelector","scrollIntoView","datePickerKeyboardNav","$datepicker","passwordDinamicValidation","emailInput","focusHelper","getPidValue","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","msgs","attrsWithSwatches","attrValue","$attrValue","$swatchButton","assistiveSelectedText","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","resources","productType","readyToOrder","imgs","carousel","carouselId","alt","title","createCarousel","promotionsHtml","availabilityValue","availabilityMessages","availability","messages","info_selectforstock","updateAvailability","attributeGroup","ID","getAttributesHtml","selectedValueUrl","optionsHtml","updateOptions","quantities","updateQuantities","parseHtml","$html","footer","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","getOptions","$elOption","urlValue","selectedValueId","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selectAttribute","setPids","childProducts","messageType","newBonusDiscountLineItem","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","errorMessage","msgSuccess","transitionEndEmulator","called","hrefAttr","transitionDelay","floatTransitionDuration","floatTransitionDelay","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","$attributes","invalidAttributesSelect","isNewPDP","isPrivateSales","isLogged","availableAttributes","optionSelected","createErrorNotification","divId","journeyMsg","guestlogin","resetPassword","resetPasswordAjax","grecaptcha","execute","clearResetForm","changePassword","bodyMeasurementSwitchButtons","productMeasurementSwitchButtons","addRemoveTbodyLightedCellClass","tbodyHighLightedCells","act","cell","hideShowUnits","sizeUnitToggler","muTogglers","toggler","ref","thisItem","lengthValue","lenghtSelect","initUnitSizeChangeBehaviour","unitSizeInputs","toggleActiveButton","toggleButtonClick","btn","selectedUnitMeasure","selectedFitGuideSection","isBodyMeasurementSection","isProductMeasurementSection","cms","ins","sizeChart","layerBody","triggerButton","enhancedMeasuringGuide","updateFitGuideUnit","sizeMeasures","updateFitGuideSize","openFitGuide","sizeConversionAccordion","bodyMeasuresAccordion","productMeasuresAccordion","productCategorySizechart","genderSizeConversionAccordion","isDynamicFitguideElement","sizeListImageUrl","sizeListOptions","tableDetails","selectedSizePDP","fitGuideContentAsset","productCategorySizeChartContentAsset","genderlessGuideContentAsset","bodyMeasurementsData","bodyMeasurementContent","bodyMeasurement","changeUnitMeasureLabel","measurementsDescriptionLabel","headings","buildTableHeader","convertedMeasurements","cm","buildSingleRowContent","buildTableBody","bodyMeasurementTemplate","fitGuide","productMeasureInput","currentRow","currentRowHeight","alert","include","_inheritsLoose","subClass","superClass","_assertThisInitialized","ReferenceError","_suppressOverwrites","_globalTimeline","_win","_coreInitted","_doc","_coreReady","_lastRenderedFrame","_quickTween","_tickerActive","_id","_req","_raf","_self","_delta","_getTime","_lagThreshold","_adjustedLag","_startTime","_lastUpdate","_gap","_nextTime","_listeners","_tick","n1","easeOut","autoSleep","force3D","nullTargetWarn","units","lineHeight","_defaults","overwrite","_bigNum","_2PI","_HALF_PI","_gsID","_sqrt","_cos","_sin","_isString","_isFunction","_isNumber","_isUndefined","_isObject","_isNotFalse","_windowExists","_isFuncOrString","_isTypedArray","ArrayBuffer","isView","_isArray","_strictNumExp","_numExp","_numWithUnitExp","_complexStringNumExp","_relExp","_delimitedValueExp","_unitExp","_globals","_installScope","_install","_merge","gsap","_missingPlugin","_warn","suppress","_addGlobal","_emptyFunc","_reservedProps","_lazyTweens","_lazyLookup","_plugins","_effects","_nextGCFrame","_harnessPlugins","_callbackNames","_harness","harnessPlugin","_gsap","harness","targetTest","GSCache","_getCache","_getProperty","_forEachName","_round","_roundPrecise","_arrayContainsAny","toSearch","toFind","_lazyRender","_lazy","_lazySafeRender","suppressEvents","_numericIfPossible","_passThrough","_setDefaults","toMerge","_mergeDeep","_copyExcluding","excluding","_inheritDefaults","vars","excludeDuration","keyframes","inherit","_dp","_removeLinkedListItem","firstProp","lastProp","_prev","_next","_removeFromParent","onlyIfParentHasAutoRemove","autoRemoveChildren","_act","_uncache","_end","_dur","_start","_dirty","_recacheAncestors","totalDuration","_elapsedCycleDuration","_repeat","_animationCycle","_tTime","_rDelay","tTime","cycleDuration","whole","_parentToChildTotalTime","parentTime","_ts","_tDur","_setEnd","_rts","_alignPlayhead","totalTime","smoothChildTiming","_time","_postAddChecks","timeline","_initted","rawTime","_clamp","_zTime","_addToTimeline","skipChecks","_parsePosition","_delay","timeScale","sortBy","_addLinkedListItem","_sort","_isFromOrFromStart","_recent","_scrollTrigger","ScrollTrigger","_attemptInitTween","_initTween","_pt","_ticker","frame","_setDuration","skipUncache","leavePlayhead","dur","totalProgress","_onUpdateTotalDuration","Timeline","_zeroPosition","endTime","percentAnimation","isPercent","recent","clippedDuration","charAt","_createTweenType","irVars","isLegacy","varsIndex","immediateRender","runBackwards","startAt","_conditionalReturn","getUnit","_slice","_isArrayLike","nonEmpty","_flatten","ar","leaveStrings","accumulator","_accumulator","_wake","shuffle","distribute","ease","_parseEase","isDecimal","ratios","ratioX","ratioY","edges","originX","originY","wrapAt","distances","u","_invertEase","_roundModifier","pow","snapTo","radius","is2D","dx","dy","roundingIncrement","returnFunction","_wrapArray","_replaceRandom","nums","mapRange","inMin","inMax","outMin","outMax","inRange","outRange","_getLabelInDirection","fromTime","backward","_callback","executeLazyFirst","callbackScope","_interrupt","scrollTrigger","kill","_createPlugin","isFunc","Plugin","_props","instanceDefaults","_renderPropTweens","_addPropTween","_killPropTweensOf","_addPluginModifier","rawVars","statics","getSetter","_getSetter","aliases","PropTween","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","h","m1","m2","splitColor","toHSL","forceAlpha","wasHSL","_colorOrderData","_colorExp","_formatColors","orderMatchData","shell","colors","_hslExp","_colorStringFilter","combined","overlap","elapsed","manual","deltaRatio","fps","wake","gsapVersions","version","GreenSockGlobals","sleep","f","lagSmoothing","adjustedLag","_fps","_easeMap","_customEaseExp","_quotesExp","_parseObjectInString","parsedVal","lastIndexOf","_propagateYoyoEase","isYoyo","_first","yoyoEase","_yoyo","_ease","_yEase","defaultEase","substring","_CE","_configEaseFromString","_insertEase","easeIn","easeInOut","_easeInOutFromOut","_configElastic","amplitude","period","p1","p2","p3","asin","_configBack","overshoot","power","Linear","easeNone","none","SteppedEase","steps","immediateStart","Infinity","repeatDelay","yoyo","_proto","_totalTime","_ptLookup","_pTime","iteration","_ps","includeRepeats","wrapRepeats","globalTime","seek","restart","includeDelay","play","reversed","atTime","resume","invalidate","eventCallback","_onUpdate","Promise","_resolve","_then","_prom","_Animation","sortChildren","_proto2","fromTo","fromVars","toVars","delayedCall","staggerTo","stagger","onCompleteAll","onCompleteAllParams","onComplete","onCompleteParams","staggerFrom","staggerFromTo","prevPaused","pauseTween","prevStart","prevIteration","tDur","crossingStart","_lock","rewinding","doesWrap","repeatRefresh","onRepeat","_hasPause","_forcing","_last","_findNextPauseTween","onUpdate","adjustedTime","addLabel","getChildren","timelines","ignoreBeforeTime","animations","removeLabel","killTweensOf","_totalTime2","addPause","removePause","onlyActive","getTweensOf","_overwritingTween","parsedTargets","isGlobalTime","tweenTo","initted","tl","_vars","_onStart","onStart","onStartParams","tweenFromTo","fromPosition","toPosition","nextLabel","afterTime","previousLabel","beforeTime","currentLabel","shiftChildren","adjustLabels","clear","includeLabels","updateRoot","_addComplexStringPropTween","stringFilter","funcParam","startNums","endNum","chunk","startNum","hasRandom","_renderComplexString","matchIndex","fp","parsedStart","_setterFuncWithParam","_setterFunc","_setterPlain","_renderBoolean","_renderPlain","_checkPlugin","plugin","ptLookup","_parseFuncOrString","_processVars","cleanVars","hasPriority","gsData","harnessVars","onUpdateParams","autoRevert","prevStartAt","_startAt","fullTargets","autoOverwrite","_overwrite","_from","_op","_sortPropTweensByPriority","_onInit","_parseKeyframe","allProps","easeEach","_staggerTweenProps","_staggerPropsToSkip","_Animation2","skipInherit","curTarget","staggerFunc","staggerVarsToMerge","_this3$vars","kf","_hasNoPausedAncestors","_proto3","prevRatio","_parentPlayheadIsBeforeStart","_renderZeroDurationTween","overwrittenProps","curLookup","curOverwriteProps","killingTargets","propTweenLookup","firstPT","a1","a2","_arraysMatch","propertyAliases","_addAliasesToVars","onReverseComplete","onReverseCompleteParams","_setterAttribute","hasNonDependentRemaining","dep","_setterWithModifier","mSet","mt","pt2","pr","change","renderer","TweenMax","TweenLite","TimelineLite","TimelineMax","registerPlugin","getProperty","uncache","format","quickSetter","setters","isTweening","registerEffect","_ref3","plugins","extendTimeline","pluginName","registerEase","parseEase","exportRoot","includeDelayedCalls","utils","range","wrapYoyo","clamp","nativeElement","reduce","unitize","mutate","interpolators","il","isString","master","install","effects","ticker","globalTimeline","core","globals","getCache","suppressOverwrites","_getPluginPropTween","_buildModifierPlugin","modifiers","_addModifiers","_win$1","_doc$1","_docElement","_pluginInitted","_tempDiv","_recentSetterPlugin","_supports3D","Power0","Power1","Power2","Power3","Power4","Quad","Cubic","Quart","Quint","Strong","Elastic","Back","Bounce","Sine","Expo","Circ","_transformProps","_RAD2DEG","_DEG2RAD","_atan2","_capsExp","_horizontalExp","_complexExp","_propertyAliases","autoAlpha","alpha","_renderCSSProp","_renderPropWithEnd","_renderCSSPropWithBeginning","_renderRoundedCSSProp","_renderNonTweeningValue","_renderNonTweeningValueOnlyAtEnd","_setterCSSStyle","_setterCSSProp","_setterTransform","_setterScale","_setterScaleWithRender","renderTransform","_setterTransformWithRender","_transformProp","_transformOriginProp","_createElement","_getComputedProperty","skipPrefixFallback","cs","_checkPropPrefix","_prefixes","preferPrefix","_initCore","_getBBoxHack","swapIfPossible","bbox","svg","ownerSVGElement","oldParent","oldSibling","oldCSS","getBBox","_gsapBBox","_getAttributeFallbacks","attributesArray","hasAttribute","_getBBox","bounds","_isSVG","getCTM","_removeProperty","removeProperty","_addNonTweeningPT","beginning","onlySetAtEnd","_nonConvertibleUnits","deg","rad","turn","_convertToUnit","px","isSVG","curUnit","horizontal","isRootSVG","measureProperty","toPixels","toPercent","_get","_parseTransform","_firstTwoOnly","zOrigin","_specialProps","_tweenComplexCSSString","startValues","startValue","endValue","endUnit","startUnit","_keywordToPercent","bottom","_renderClearProps","clearTransforms","clearProps","_identity2DMatrix","_rotationalProperties","_isNullTransform","_getComputedTransformMatrixAsArray","matrixString","_getMatrix","force2D","addedToDOM","baseVal","consolidate","_applySVGOrigin","originIsAbsolute","smooth","matrixArray","pluginToAddPropTweensTo","determinant","xOriginOld","xOrigin","yOriginOld","yOrigin","xOffsetOld","xOffset","yOffsetOld","yOffset","originSplit","z","rotation","rotationX","rotationY","skewX","skewY","angle","a12","a22","t1","t2","t3","a13","a23","a33","a42","a43","a32","invertedScaleX","forceCSS","xPercent","yPercent","transformPerspective","_renderSVGTransforms","_renderCSSTransforms","_renderNon3DTransforms","_addPxTranslate","transforms","use3D","a11","a21","tan","_addRotationalPropTween","cap","_assign","_addRawTransformPTs","endCache","startCache","all","CSSPlugin","specialProp","isTransformRelated","transformPropTween","parseTransform","smoothOrigin","autoRound","checkPrefix","positionAndScale","gsapWithCSS","TweenMaxWithCSS","default","selects","setDisabledElement","selectElement","customOptions","specialChars","tmpCustomOption","freeGlobal","freeSelf","showOnModal","initNotifyReCaptcha","$recaptchaInput","email","updateForm","notifyWhenAvailablePopUpHtml","hasProperty","lastItemOf","pushUnique","stringToArray","str","separator","isInRange","testVal","limitToRange","createTagRepeat","optimizeTemplateHTML","stripTime","timeValue","setHours","dateValue","newDate","setFullYear","addDays","date","setDate","addMonths","monthsToSet","expectedMonth","setMonth","addYears","dayDiff","day","dayOfTheWeekOf","baseDate","dayOfWeek","weekStart","baseDay","getDay","startOfYearPeriod","years","year","reFormatTokens","reNonDateParts","knownFormats","parseFns","month","locale","monthIndex","NaN","monthName","compareNames","startsWith","monthsShort","findIndex","months","normalizeMonth","formatFns","dd","padZero","D","daysShort","DD","days","mm","M","MM","yy","yyyy","padStart","parseFormatString","separators","partFormatters","partParserKeys","dateStr","dateParts","dtParts","origDate","formatter","parseDate","toValue","parser","formatDate","dateObj","toDisplay","listenerRegistry","WeakMap","EventTarget","registerListeners","keyObj","listeners","registered","unregisterListeners","delete","getComposedPath","findElementInEventPath","ev","criteria","findFromPath","en","daysMin","titleFormat","autohide","beforeShowDay","beforeShowDecade","beforeShowMonth","beforeShowYear","calendarWeeks","clearBtn","dateDelimiter","datesDisabled","daysOfWeekDisabled","daysOfWeekHighlighted","defaultViewDate","disableTouchKeyboard","language","maxNumberOfDates","maxView","minDate","nextArrow","orientation","pickLevel","prevArrow","showDaysOfWeek","showOnClick","showOnFocus","startView","todayBtn","todayBtnMode","todayHighlight","updateOnBlur","createRange","createContextualFragment","hideElement","styleDisplay","showElement","emptyChildNodes","defaultLang","defaultFormat","defaultWeekStart","sanitizeDOW","dow","calcEndOfWeek","startOfWeek","validateDate","origValue","validateViewId","viewId","processOptions","datepicker","inOpts","locales","origLocale","weekEnd","hasToDisplay","hasToValue","validFormatString","minDt","maxDt","dates","dt","viewDate","wkStart","multidate","newPickLevel","newMaxView","newStartView","class","picker","isMinView","setOptions","updateFocus","updateSelection","beforeShow","extraClasses","newChildNodes","DocumentFragment","replaceChildNodes","cellClass","onConstruction","inner","updateDOW","dayNames","switchLabelFormat","weeksElem","weeks","viewYear","viewMonth","firstOfMonth","focused","rangepicker","switchLabel","setViewSwitchLabel","setPrevBtnDisabled","setNextBtnDisabled","thuOfTheWeek","firstThu","getWeek","rangeStart","rangeEnd","performBeforeHook","computeMonthRange","thisYear","startM","endY","endM","ix","monthNames","minYear","minMonth","minDateObj","maxYear","maxMonth","maxDateObj","yrOutOfRange","isMinYear","isMaxYear","word","navStep","beforeShowOption","triggerDatepickerEvent","currentView","goToPrevOrNext","newViewDate","changeFocus","switchView","changeView","unfocus","goToSelectedMonthOrYear","onClickTodayBtn","currentDate","onClickClearBtn","onClickViewSwitch","onClickPrevBtn","onClickNextBtn","onClickView","onClickPicker","inline","inputField","processPickerOptions","prevBtn","nextBtn","computeResetViewDate","setViewDate","oldViewDate","getTextDirection","template","buttonClass","header","main","viewSwitch","lastElementChild","views","inputDirection","place","exitEditMode","calendarWidth","calendarHeight","containerLeft","containerTop","containerWidth","inputLeft","inputTop","inputWidth","inputHeight","orientX","orientY","labelText","oldView","newView","_renderMethod","quickRender","renderMethod","moveByArrowKey","vertical","addFn","testFn","findNextAvailableOne","increase","onKeydown","editMode","enterEditMode","onFocus","_showing","onMousedown","_active","_clicking","onClickInput","onPaste","clipboardData","onClickOutside","pickerElem","stringifyDates","processInputDates","inputDates","origDates","datepickers","newDates","refreshUI","_options","initialDates","inputs","inputDateValues","onMousedownDocument","newOptions","lastArg","forceRender","inputElement","datepickerDefault","milliseconds","nowTime","currentConfig","errorHtml","toNumber","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","currentPage","lastActiveID","block","_insideGraph","doEvent","insideFrontInterface","getAvailableAssistants","lastKnownScrollY","currentScrollY","eleHeader","eleSearch","pin","clickedElement","$clickedBox","handleFooterAccordionToggle","imageContainers","textBanners","availHeight","entry","EvEmitter","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","addElementImages","elementNodeTypes","addImage","addElementBackgroundImages","childImgs","img","reURL","LoadingImage","Background","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","isLoaded","emitEvent","debug","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","unbindEvents","makeJQueryPlugin","_events","onceEvents","_onceEvents","onceListeners","allOff","debounce","endpoint","lastSearch","searchterms","getSuggestionsWrapper","isMobileSearch","clearModals","tearDownSuggestions","toggleSuggestionsIcon","mobileSearchIcon","handleMoreContentBelowIcon","processResponse","$scope","$suggestions","$suggestionsWrapper","scroll","applyModals","suggestionsList","getSuggestions","handleArrow","debounceSuggestions","currentCategoryPath","elementList","triggerElementList","landingContainer","mainHeader","imgContainer","actionContainer","handleTileLinks","newHref","gdpr","showConsentPreferences","onAccept","newsletterLayer","ariaHidden","onClose","onCloseDynamic","expires","toUTCString","cookie","setCookie","popupId","baseGetTag","isObjectLike","returnChangeType","returnReason","returnQuantity","keepArticleQuestion","sizeChangeOptions","colorChangeOptions","showReturnQuantity","showKeepArticleQuestion","showReturn","showSizeChange","showColorChange","hideElements","el1","el2","el3","getRawTag","objectToString","symToStringTag","objectProto","nativeObjectToString","isOwn","unmasked"],"mappings":"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","file":"app_project_marni/cartridge/static/default/js/main.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 = 923);\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\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// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\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 fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\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\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\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\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\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\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\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\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\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\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();\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\" && !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\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || 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 ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\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\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\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\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\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\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\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 length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\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 flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\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\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (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 = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\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.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\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\tnonnativeSelectorCache = 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// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://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|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\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\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\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 + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\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)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\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 +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\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\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\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\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\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\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\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\tpushNative.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\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 m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\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}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\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\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\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\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\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 element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = 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 = arr.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\ta.sourceIndex - b.sourceIndex;\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 :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\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\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\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, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\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( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.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( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.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 programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\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\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\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\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\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\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 ( typeof context.getElementsByClassName !== \"undefined\" && 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 https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\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// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' 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// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.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 ( !el.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.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\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 ( !el.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 sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\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 = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.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 ( el.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 ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.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( el ) {\n\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( el, \"*\" );\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( el, \"[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 self-exclusive\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( 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\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\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\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\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\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\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\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\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\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.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\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\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\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\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\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\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 ] ||\n\t\t\t\tmatch[ 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\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\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 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\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\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\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() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\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 +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\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\t/* eslint-disable max-len */\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\t/* eslint-enable max-len */\n\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, uniqueCache, outerCache, node, 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\t\t\t\t\t\tdiff = false;\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 ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\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\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\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && 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\tuniqueCache[ 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} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\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\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\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\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\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\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\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\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\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 || 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\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 &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\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 ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\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\t// eslint-disable-next-line no-unused-expressions\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\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 ||\n\t\t\t\t\tattr.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 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\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\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\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\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\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\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, 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 combinator 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\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\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\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = 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\treturn false;\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(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\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\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\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\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\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\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.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\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\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\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\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\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, 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\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// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\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\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\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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.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\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 ) ||\n\t\t\t\t\t\tcontext\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\t!context || rsibling.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( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.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( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.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( el ) {\n\treturn el.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( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\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;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\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\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\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\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : 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\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\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// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\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\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 ( 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\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\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 || root ).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[ 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 ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\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\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.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\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\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 this.pushStack( matched.length > 1 ? jQuery.uniqueSort( 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.uniqueSort(\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 dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn 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 dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn 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\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( 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 rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], 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\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\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\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\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\tif ( isFunction( arg ) ) {\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 && toType( arg ) !== \"string\" ) {\n\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\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\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\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 ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\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 ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\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\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\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\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\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\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 && 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.progress( newDefer.notify )\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} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\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\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\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 jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\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// 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[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = 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(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\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( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\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// 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\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\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 = 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 ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( 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 ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\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(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\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\treturn this.get( owner, 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,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = 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 getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\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, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\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\tdataUser.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 dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.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 dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.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 = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.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: IE 11 only\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 = 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\tdataPriv.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\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\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\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.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 \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( 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// 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\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\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\tdataUser.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 = dataPriv.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 || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.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\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 = dataPriv.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 rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\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\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\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 ( isHiddenWithinTree( 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} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/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: Android 4.0 - 4.3 only\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: Android <=4.1 only\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 only\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\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\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\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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 = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\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// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, 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 = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\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 !== \"undefined\" && 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( rnothtmlwhite ) || [ \"\" ];\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 ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\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 = dataPriv.hasData( elem ) && dataPriv.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( rnothtmlwhite ) || [ \"\" ];\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 ] &&\n\t\t\t\tnew 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 ||\n\t\t\t\t\t\tselector === \"**\" && 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 ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\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 data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ 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\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\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++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.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 ||\n\t\t\t\t\t\thandleObj.handler ).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, handleObj, sel, matchedHandlers, matchedSelectors,\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\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\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 ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\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 ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\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\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( 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\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\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\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\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 || Date.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// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\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 && !this.isSimulated ) {\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 && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\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 mouseenter/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\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, 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\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 ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.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\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\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\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\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\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, 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 ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle 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 ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\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\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\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\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\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 collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( 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: https://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\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\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 ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\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\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\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 domManip( this, 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 domManip( this, 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 domManip( this, 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 domManip( this, 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\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 = jQuery.htmlPrefilter( value );\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 ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\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: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, 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\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\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.call( elem );\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 rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\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 computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\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\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\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\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\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// 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\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\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\"animationIterationCount\": true,\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\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": 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\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 = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\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 = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\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 was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\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 ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\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 = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\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 || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\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\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\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 ( prefix !== \"margin\" ) {\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 ( Array.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} );\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 || jQuery.easing._default;\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\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && 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\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\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.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\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: IE <=9 only\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\t_default: \"swing\"\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, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\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\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// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( 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// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\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\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\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// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\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 = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.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 = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\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\n\t\t\t\t// Support: Android 2.3 only\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\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\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, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, 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\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\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.notifyWith( elem, [ animation, 1, 0 ] );\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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.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\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\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\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\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.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\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\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 ( 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( isHiddenWithinTree ).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\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 || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\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 ) {\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 = dataPriv.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 &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\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 = dataPriv.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 = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\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\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( 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: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\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 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 ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( 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 === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\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\tnodeName( 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\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\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\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};\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\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/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\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\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\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\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\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\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\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\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 = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", 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, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\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 = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", 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\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\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 ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", 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\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\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, valueIsFunction,\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 ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\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\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = 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 ( valueIsFunction ) {\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 ( Array.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\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\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( 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, i,\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\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\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// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\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!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!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\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\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 ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\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\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\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 = lastElement = 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( \".\" ) > -1 ) {\n\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.rnamespace = 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 && !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\t\t\tlastElement = cur;\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 = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.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 && 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 ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same 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 && isFunction( elem[ type ] ) && !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\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\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\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\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}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\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\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\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\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.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\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.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\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\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 ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\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\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\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\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, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\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\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( \"&\" );\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\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} ).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} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\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\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// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\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( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\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\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\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\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\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\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\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\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 {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\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: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\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: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\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\": JSON.parse,\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\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\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 &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\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 ( completed ) {\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() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( 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.join( \", \" );\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 completed ? 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\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || 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 ( completed == null ) {\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 ( completed ) {\n\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} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\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}\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 );\n\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 || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\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 = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\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 ( completed ) {\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\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\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 or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\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 ] ] +\n\t\t\t\t\t( 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 &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\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\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\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\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.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\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\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// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( 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// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\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\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\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\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\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}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\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 ( 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 htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\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\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\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\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\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\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = 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\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\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\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\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} 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\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\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\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\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\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// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\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\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = 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\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\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.guid++ ) );\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\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.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 = 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\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\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 && 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// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = 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/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( 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\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\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// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.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\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 ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, 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\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\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 rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\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\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\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\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\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 : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.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 );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\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://bugs.chromium.org/p/chromium/issues/detail?id=589347\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\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( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\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 ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.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\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 );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\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\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\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\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 === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","require('bootstrap/js/src/util.js');\nrequire('bootstrap/js/src/alert.js');\n// require('bootstrap/js/src/button.js');\nrequire('bootstrap/js/src/carousel.js');\nrequire('bootstrap/js/src/collapse.js');\n// require('bootstrap/js/src/dropdown.js');\nrequire('bootstrap/js/src/modal.js');\nrequire('bootstrap/js/src/scrollspy.js');\nrequire('bootstrap/js/src/tab.js');\n// require('bootstrap/js/src/tooltip.js');\n// require('bootstrap/js/src/popover.js');\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(Selector.NAV_LIST_GROUP).prev(`${Selector.NAV_LINKS}, ${Selector.LIST_ITEMS}`).addClass(ClassName.ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE)\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter((node) => node.classList.contains(ClassName.ACTIVE))\n .forEach((node) => node.classList.remove(ClassName.ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active',\n DISABLED : 'disabled',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DROPDOWN : '.dropdown',\n NAV_LIST_GROUP : '.nav, .list-group',\n ACTIVE : '.active',\n ACTIVE_UL : '> li > .active',\n DATA_TOGGLE : '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE : '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(ClassName.ACTIVE) ||\n $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL')\n ? $(container).find(Selector.ACTIVE_UL)\n : $(container).children(Selector.ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(ClassName.FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(ClassName.SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n Selector.DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(ClassName.ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(ClassName.FADE)) {\n element.classList.add(ClassName.SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(ClassName.ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\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\n/**\n * Show a spinner inside a given element\n * @param {element} $target - Element to block by the veil and spinner.\n * Pass body to block the whole page.\n */\nfunction addSpinner($target) {\n let $veil = $('<div class=\"veil\"><div class=\"underlay\"></div></div>');\n $veil.append('<div class=\"spinner\"><div class=\"dot1\"></div><div class=\"dot2\"></div></div>');\n if ($target.get(0).tagName === 'IMG') {\n $target.after($veil);\n $veil.css({ width: $target.width(), height: $target.height() });\n if ($target.parent().css('position') === 'static') {\n $target.parent().css('position', 'relative');\n }\n } else {\n $target.append($veil);\n if ($target.css('position') === 'static') {\n $target.parent().css('position', 'relative');\n $target.parent().addClass('veiled');\n }\n if ($target.get(0).tagName === 'BODY') {\n $veil.find('.spinner').css('position', 'fixed');\n }\n }\n $veil.click(function (e) {\n e.stopPropagation();\n });\n}\n\n/**\n * Remove existing spinner\n * @param {element} $veil - jQuery pointer to the veil element\n */\nfunction removeSpinner($veil) {\n if ($veil.parent().hasClass('veiled')) {\n $veil.parent().css('position', '');\n $veil.parent().removeClass('veiled');\n }\n $veil.off('click');\n $veil.remove();\n}\n\n// element level spinner:\n$.fn.spinner = function () {\n let $element = $(this);\n let Fn = function () {\n this.start = function () {\n if ($element.length) {\n // remove default spinner test IBT-1180\n // addSpinner($element);\n }\n };\n this.stop = function () {\n if ($element.length) {\n // remove default spinner test IBT-1180\n // let $veil = $('.veil');\n // removeSpinner($veil);\n }\n };\n };\n return new Fn();\n};\n\n// page-level spinner:\n$.spinner = function () {\n let Fn = function () {\n this.start = function () {\n // remove default spinner test IBT-1180\n // addSpinner($('body'));\n };\n this.stop = function () {\n // remove default spinner test IBT-1180\n // removeSpinner($('.veil'));\n };\n };\n return new Fn();\n};\n","'use strict';\n\nlet processInclude = require('core/util');\n\n$(document).ready(function () {\n const isMargiela = document.body.dataset.sitebrand === \"Margiela\";\n\n // MARG-841 MARG-774\n const selector = isMargiela\n ? '#login-page, #guest-login-page, #account-passwordreset, #account-setnewpassword, #account-passwordupdatejourneyfrompm, #account-passwordupdatejourneyfromcampaign, #login-show'\n : '#login-page, #guest-login-page';\n if ($(selector).length > 0) {\n processInclude(require('core/login/login'));\n }\n\n // MARG-772\n if (isMargiela) {\n const searchParams = new URLSearchParams(window.location.search);\n if (searchParams.has('password-reset-token')) {\n $.spinner().start();\n const result = $('<div></div>');\n const selector = '[data-option-modalopenid=\"new-password\"],[data-option-modalopenid=\"forgot-password\"]';\n result.load($('.mm-menu-logo > a').attr('href') + 'account-setnewpassword?'\n + $.param({ token: searchParams.get('password-reset-token'), journey: searchParams.get('journey') })\n + ' ' + selector, (response, status, xhr) => {\n $.spinner().stop();\n\n // console.log('status', status, 'xhr', xhr);\n // console.log('xhr.statusCode', xhr.statusCode, \"xhr.getResponseHeader('Location')\", xhr.getResponseHeader('Location'));\n \n if (status === 'error') return; // TODO\n\n if (xhr.statusCode === 302) {\n $.spinner().start();\n result.load(xhr.getResponseHeader('Location') + '?'\n + $.param({ journey: searchParams.get('journey') })\n + ' ' + selector, (response2, status2, xhr2) => {\n $.spinner().stop();\n\n // console.log('status2', status2, 'xhr2', xhr2);\n\n if (status === 'error') return; // TODO\n\n result.find(selector).attr({ 'data-option-immediate': 'true', 'data-option-delay': '10' });\n $(document.body).append(result); // .contents());\n processInclude(require('core/login/login'));\n });\n return;\n }\n\n result.find(selector).attr({ 'data-option-immediate': 'true', 'data-option-delay': '10' });\n $(document.body).append(result); // .contents());\n processInclude(require('core/login/login'));\n });\n }\n }\n});\n\n$(document).on('login-dropdown:openRemote login-modal:openRemote', function (e) {\n processInclude(require('core/login/login'));\n});\n","'use strict';\n\nconst addToCartValidation = require('../product/addToCartValidation');\nconst base = require('base/product/base');\nconst isMargiela = document.querySelector('body').classList.contains('Margiela');\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\nconst isMarni = document.body.dataset.sitebrand === \"Marni\";\nconst processInclude = require('core/util');\nlet customSelect;\n\n\n\n$(document).ready(function () {\n\n if(isMargiela) {\n processInclude(require('core/product/fitguide'));\n }\n\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n }\n\n if($('.product-notify .modal-content').length > 0) {\n const notify = processInclude(require('core/product/notifyWhenAvailable'));\n\n $('.notify-me-modal-button').on('click', function(e) {\n \n if(!isMargiela && ($(e.target).closest('form').find('.single-val-size.selected').length > 0 || $(e.target).closest('form').find('.notify-me-content-url').length > 0)) {\n let url = $(e.target).closest('form').find('.single-val-size.selected').data('notifyme-url');\n $(e.target).closest('form').find('.notify-me-content-url').length > 0 ? url = $(e.target).closest('form').find('.notify-me-content-url').data('notifyme-url') : '';\n $.ajax({\n url: url,\n method: 'GET',\n success: function (responseData) {\n const $container = $('.product-notify .modal-content');\n if ($container.length > 0) {\n $container.empty().append(responseData.notifyWhenAvailableHtml);\n }\n },\n error: function () {\n console.log('Error while getting notify content');\n },\n });\n }\n });\n\n }\n\n \n\n const userCustomerGroupsUrl = $('.private-sales').data('userCustomerGroupsUrl');\n if(userCustomerGroupsUrl) {\n $.ajax({\n url: userCustomerGroupsUrl,\n method: 'GET',\n success: function (responseData) {\n if (!responseData.error) {\n $('.private-sales').each(function() {\n checkPrivateSales($(this), responseData.isUserAuthenticated, responseData.customerGroups);\n });\n }\n },\n error: function () {\n console.log('Error while getting customer groups');\n },\n });\n }\n \n});\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n * @param {string} action - button that was clicked to add a product to the wishlist\n */\nfunction handleResponse(data, button, action = 'add') {\n $.spinner().stop();\n\n if (data.success) {\n showAriaHint(button,data.msg,action);\n\n const $quantity = $('.wishlist-quantity');\n (isMargiela ? $quantity : $('header .wishlist-quantity'))[data.listIsEmpty ? 'addClass' : 'removeClass']('d-none');\n\n if (action === 'remove') {\n button.removeClass('active');\n\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = data.listIsEmpty ? 0 : parseInt($quantity[i].innerHTML, 10) - 1;\n }\n } else {\n button.addClass('active');\n\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = parseInt($quantity[i].innerHTML, 10) + 1;\n }\n\n const modalpid = data.pid;\n $('.js_add-to-wish-list-cart[data-pid=\"' + modalpid + '\"]').addClass('active');\n $('body').trigger('product:afterAddToWishlist', this);\n }\n\n if (isMargiela && action !== 'remove') {\n const event = new CustomEvent('notification:show', {\n detail: {\n message: data.msg,\n icon: true,\n linkCart: false,\n linkWishlist: true\n }\n });\n document.body.dispatchEvent(event);\n }\n\n isMargiela && $('.js-button-wishlist')[data.listIsEmpty ? 'removeClass' : 'addClass']('-dot-info');\n }\n\n setTimeout(function () {\n button.removeClass('disabled-click');\n button.attr('tabindex' , 0);\n }, 5000);\n}\n\nfunction showAriaHint(button,message,action) {\n let nonvisualHint = button.next('.visually-hidden');\n $(nonvisualHint).text(message);\n if (action === 'add') {\n button.attr('aria-pressed', 'true');\n } else {\n button.attr('aria-pressed', 'false');\n }\n}\n\nfunction showErrorMessage(form, message) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html(message);\n const button = $(form).find('.add-to-cart--wishlist');\n $(button).addClass('disabled');\n $(button).prop('disabled', true);\n}\n\nfunction hideErrorMessage(form) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html('');\n const button = $(form).find('.add-to-cart--wishlist');\n $(button).removeClass('disabled');\n $(button).prop('disabled', false);\n}\n\nfunction addToCartFromWishlist(form, e) {\n const globalAddToCartURL = document.querySelector('input[name=\"global-add-to-cart-url\"]');\n const pidInput = form.getAttribute('data-pid');\n\n hideErrorMessage(form);\n if (globalAddToCartURL && pidInput) {\n $.ajax({\n url: globalAddToCartURL.value,\n method: 'POST',\n data: {\n quantity: 1,\n pid: pidInput,\n },\n success: function (responseData) {\n if (!responseData.error) {\n $('body').trigger('product:afterAddToCart', responseData); // eslint-disable-line no-undef\n $('.minicart-action').trigger('click');\n $('.js-quantity.quantity.counter').text(responseData.quantityTotal);\n \n if (isMargiela) {\n $('.js-button-minicart').addClass('-dot-info');\n $('.js-cart-header-numitems').text(responseData.quantityTotal).removeClass('d-none');\n document.body.dispatchEvent(new CustomEvent('notification:show', {\n detail: {\n message: responseData.message,\n icon: true,\n linkCart: true,\n linkWishlist: false\n }\n }));\n if ($('.cart-page').length > 0) {\n location.reload();\n }\n }\n if(isJilSander) {\n $('.js-cart-header-numitems').text(responseData.quantityTotal).removeClass('d-none');\n const removeItem = e.target && e.target.querySelector('.remove-from-wishlist');\n removeItem && removeItem.click();\n $(\".minicart\").trigger(\"count:update\", responseData);\n if(window.isMobile()) {\n document.body.dispatchEvent(new CustomEvent('notification:show', {\n detail: {\n message: responseData.message,\n icon: true,\n linkCart: true,\n linkWishlist: false\n }\n }));\n } else {\n $('.mini-cart-content, .minicart-backdrop').addClass('show');\n $('body').trigger('minicart:load');\n }\n $('.minicart-backdrop, .continue-shopping-btn').on('click', () => {\n $('.mini-cart-content, .minicart-backdrop').removeClass('show').hide();\n });\n }\n } else {\n if (responseData.privateSalesError) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html(responseData.message);\n if (window.isMobile()) {\n window.location.href = $('.private-sales').data('loginRedirectUrl');\n } else {\n if ($('#login-dropdown[data-remote-content]').data('remoteContent').indexOf('rurl') < 0) {\n $('#login-dropdown[data-remote-content]').attr('data-remote-content', $('#login-dropdown[data-remote-content]').data('remoteContent') + '?rurl=7');\n }\n $('.login-dropdown .js-dropdown-trigger').trigger('click');\n $('body').one('user:loggedIn', function(e) {\n e.preventDefault();\n $('form.private-sales-product button.add-to-cart').trigger('click');\n });\n $('html, body').animate({ scrollTop: 0, }, 500 );\n }\n } else {\n showErrorMessage(form, responseData.message);\n }\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n },\n });\n }\n}\n\nfunction populateTile(product, masterID, targetForm) {\n let productTile;\n if(!isMargiela && !isMarni){\n productTile = targetForm.closest(`.product[data-pid=\"${masterID}\"]`);\n } else {\n productTile = targetForm.closest(`.product-tile--wishlist[data-master-id=\"${masterID}\"]`).closest(`.product`);\n }\n const tileImage = productTile.querySelector('.tile-image');\n\n // MARG-661\n isMargiela && tileImage && tileImage.removeAttribute('srcset');\n\n tileImage && isMarni ? tileImage.setAttribute('src', product.swipeableImages.large[0].url) : tileImage.setAttribute('src', product.images.large[0].urlLarge);\n isMarni ? productTile.querySelector('.single-element-content-image').href = product.modelFabricColorProductURl : '';\n isMarni ? productTile.querySelector('.single-element-content-detail-description .product-link').href = product.modelFabricColorProductURl : '';\n isMarni && product.wishlistProductNameForTile ? productTile.querySelector('.single-element-content-detail-description .product-link').innerHTML = product.wishlistProductNameForTile : '';\n const tileBody = productTile.querySelector('.tile-body');\n const price = productTile.querySelector('.price');\n price && (isMargiela ? price.parentNode : price).remove();\n\n if (isMargiela) {\n const info = tileBody.querySelector('.mm-product-card__info__default');\n info.insertAdjacentHTML('beforeend', product.price.html);\n const price2 = info.querySelector('.price');\n price && price2 && price.querySelectorAll(':scope > :not(.default-price-container)').forEach(e => price2.append(e));\n } else if(isMarni) {\n product.variationGroupPrice && product.variationGroupPrice.html ? tileBody.insertAdjacentHTML('beforeend', product.variationGroupPrice.html) : tileBody.insertAdjacentHTML('beforeend', product.price.html);\n } else {\n tileBody.insertAdjacentHTML('beforeend', product.price.html);\n }\n\n [...productTile.querySelectorAll('[data-pid]')].forEach((item) => {\n item.setAttribute('data-pid', product.id);\n });\n product.variationAttributes.forEach((attribute) => {\n if (isMargiela && attribute.attributeId === 'color') {\n const colorsBox = productTile.querySelector('.colors-box');\n colorsBox.innerHTML = attribute.values.map(color => {\n // app_project_margiela/cartridge/templates/default/product/components/productTileColors.isml\n const code = color.HEXColor ? color.HEXColor.split('|') : [];\n const backgroudColor = code.length == 0 ? '' : code.length > 1 ? `background: linear-gradient(90deg, ${code[0]} 50%, ${code[1]} 50%)` : `background-color: ${code[0]}`;\n return `<li class=\"mm-color-swatch ${code.length > 1 ? 'doubled-color' : ''}\">\n <input\n type=\"radio\"\n name=\"dwvar_${masterID}_color\"\n data-name=\"variant_${color.displayValue}\"\n value=\"${color.value}\"\n data-display-value=\"${color.displayValue}\"\n ${color.selected ? 'checked' : ''}\n class=\"value-${color.id} mm-color-swatch__inner ${color.selected ? 'selected-color' : ''} ${code.length > 1 ? 'doubled-color' : ''} wishlist__select\"\n data-value-id=\"value-${color.id}\"\n style='${backgroudColor}'\n form=\"${targetForm.id}\" />\n <span class=\"visually-hidden\">${color.displayValue}</span>\n</li>`;\n }).join('');\n colorsBox.querySelectorAll('.wishlist__select').forEach(ws => ws.addEventListener('change', wishlistSelectChange));\n return;\n }\n const attributeSelect = productTile.querySelector(`[name=\"dwvar_${masterID}_${attribute.attributeId}\"]`);\n if (!attributeSelect) {\n return;\n }\n attributeSelect.innerHTML = isMarni && attributeSelect.options[0].value === '' ? attributeSelect.options[0].outerHTML : '';\n attribute.values.forEach((value) => {\n const option = `<option class=\"${!value.selectable && isMarni ? 'disabled' : ''}\" value=\"${value.value}\" ${value.selected ? 'selected' : ''}\n ${'data-attr-value=\"' + value.value + '\"'} ${!value.selectable && !isMargiela ? 'disabled' : ''}>\n ${value.displayValue}\n ${isMargiela && !value.selectable ? attributeSelect.dataset.notavailable : ''}\n</option>`;\n attributeSelect.insertAdjacentHTML('beforeend', option);\n });\n });\n\n\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n var privateSalesSpan = productTile.querySelector('span.private-sales');\n product.isPrivateSalesProduct ? $(privateSalesSpan).data('isPrivateSalesProduct', true) : $(privateSalesSpan).data('isPrivateSalesProduct', false);\n \n if(product.isPrivateSalesProduct) {\n const userCustomerGroupsUrl = $(privateSalesSpan).data('userCustomerGroupsUrl');\n $.ajax({\n url: userCustomerGroupsUrl,\n method: 'GET',\n success: function (responseData) {\n if (!responseData.error) {\n $('.private-sales').each(function() {\n checkPrivateSales($(this), responseData.isUserAuthenticated, responseData.customerGroups);\n });\n }\n },\n error: function () {\n console.log('Error while getting customer groups');\n },\n });\n } else {\n const addToCartText = $(privateSalesSpan).data('addToCartText');\n $(privateSalesSpan).parent().find('span.add-to-cart--wishlist-text').html(addToCartText);\n }\n }\n\n\n if (isMargiela) {\n const notifyAndAddToCart = productTile.querySelector('.add-to-cart-switch');\n productTile.querySelector('.notify-me-content-url') ? productTile.querySelector('.notify-me-content-url').remove() : '';\n if (product.available) {\n notifyAndAddToCart.classList.remove('show-notify-me');\n } else if (!product.available && product.showBackInStockNotification) {\n notifyAndAddToCart.classList.add('show-notify-me');\n }\n const $container = $('.product-notify .modal-content');\n if ($container.length > 0) {\n $container.empty().append(product.notifyWhenAvailableHtml);\n }\n\n var isSelectedSize = productTile.querySelector('.select-size').value ? true : false;\n\n productTile.querySelector('.add-to-cart-switch').classList.toggle('-active', isSelectedSize);\n productTile.querySelector('.size-switch').classList.toggle('-active', !isSelectedSize);\n\n } else {\n if (product.isOrderable) {\n productTile.querySelector('.add-to-cart--wishlist').removeAttribute('disabled');\n productTile.querySelector('.add-to-cart--wishlist').classList.remove('inactive-btn');\n } else {\n productTile.querySelector('.add-to-cart--wishlist').setAttribute('disabled', 'disabled');\n productTile.querySelector('.add-to-cart--wishlist').classList.add('inactive-btn');\n }\n }\n\n $.spinner().stop();\n}\n\nfunction bindAddToCart() {\n const wishlistItemAttributeSelect = [...document.querySelectorAll('.wishlist__select')];\n wishlistItemAttributeSelect.forEach((select) => {\n select.addEventListener('change', wishlistSelectChange);\n const options = [...select.querySelectorAll('option')];\n });\n\n const addToCartForm = [...document.querySelectorAll('form[name=\"add-to-cart-from-wishlist\"]')];\n addToCartForm.forEach((form) => {\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n if (addToCartValidation($(form))) {\n addToCartFromWishlist(form, e);\n }\n });\n });\n}\n\nfunction wishlistSelectChange(e) {\n const target = e.currentTarget;\n const parentForm = target.form;\n $(e.target).parent().removeClass('invalid');\n hideErrorMessage(parentForm);\n \n if(isMarni) {\n $('select.select-color option').prop('disabled', false);\n if(!isMobile()) {\n const btnVal = $(e.target).parent().find('.fsb-select .fsb-button span').text();\n const ariaSelected = $(e.target).parent().find(\"span.fsb-list\").find(\"[aria-selected='true']\").attr('value');\n ariaSelected ? $(e.target).val(ariaSelected) : $(e.target).parent().find('.fsb-original-select option').filter(function() { return $.trim($(this).text()) == btnVal;}).prop('selected', true);\n }\n }\n\n if (parentForm.checkValidity()) {\n $.ajax({\n url: parentForm.getAttribute('action'),\n method: 'GET',\n data: $(parentForm).serialize(),\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (responseData) {\n target.dispatchEvent(new Event('blur'));\n parentForm.setAttribute('data-pid', responseData.product.id);\n parentForm.querySelector('input[name=\"ean\"]').value = responseData.product.id;\n populateTile(responseData.product, parentForm.querySelector('input[name=\"pid\"]').value, parentForm);\n },\n error: function () {\n $.spinner().stop();\n },\n });\n }\n}\n\n/**\n * Decrease the number in the wishlist counter in header when an item is deleted,\n * or hide the wishlist icon if there are no more items after the deletion.\n */\nfunction decreaseWishlistCounter() {\n const $quantity = $('body').find('.wishlist-quantity');\n if (!$quantity.length) return;\n\n let qty = parseInt($quantity[0].innerHTML, 10);\n\n qty = qty > 1 ? qty - 1 : 0;\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = qty;\n }\n \n if (isMargiela) {\n $('.js-button-wishlist')[qty > 0 ? 'addClass' : 'removeClass']('-dot-info');\n $quantity[qty > 0 ? 'removeClass' : 'addClass']('d-none');\n }\n}\n\n/**\n * @param {Object} $elementAppendTo - The element to append error html to\n * @param {string} msg - The error message\n * display error message if remove item from wishlist failed\n */\nfunction displayErrorMessage($elementAppendTo, msg) {\n if ($('.remove-from-wishlist-messages').length === 0) {\n $elementAppendTo.append('<div class=\"remove-from-wishlist-messages \"></div>');\n }\n\n $('.remove-from-wishlist-messages').append(\n '<div class=\"remove-from-wishlist-alert text-center alert-danger\">' + msg + '</div>'\n );\n\n setTimeout(function () {\n $('.remove-from-wishlist-messages').remove();\n }, 3000);\n}\n\n/**\n * renders the list up to a given page number\n * @param {number} pageNumber - current page number\n * @param {boolean} spinner - if the spinner has already started\n */\nfunction renderNewPageOfItems(pageNumber, spinner) {\n const publicView = $('.wishlistItemCardsData').data('public-view');\n const listUUID = $('.wishlistItemCardsData').data('uuid');\n const url = $('.wishlistItemCardsData').data('href');\n const account = $('.wishlistItemCardsData').data('account');\n\n if (spinner) {\n $.spinner().start();\n }\n\n const scrollPosition = document.documentElement.scrollTop;\n let newPageNumber = pageNumber;\n $.ajax({\n url: url,\n method: 'get',\n data: {\n pageNumber: ++newPageNumber,\n publicView: publicView,\n id: listUUID,\n account: account,\n },\n })\n .done(function (data) {\n $('.wishlistItemCards').empty();\n $('body .wishlistItemCards').replaceWith(data);\n bindAddToCart();\n document.documentElement.scrollTop = scrollPosition;\n if(document.querySelector('.mm-video-card:not(.observed)')) {\n $('body').trigger('wishlist:update-plp-cards');\n }\n if(isMarni) {\n loadScript('https://cdn.jsdelivr.net/gh/mdbassit/FancySelect@latest/dist/fancyselect.min.js');\n }\n \n })\n .fail(function () {\n $('.more-wl-items').remove();\n });\n $.spinner().stop();\n}\n\nfunction loadScript(url) {\n document.querySelector('script[src$=\"'+ url +'\"]') ? document.querySelector('script[src$=\"'+ url +'\"]').remove() : '' ;\n let script = document.createElement('script');\n script.src = url;\n document.body.appendChild(script);\n}\n\nfunction bindRemoveFromWishlist(){\n $('body').on('click', '.remove-from-wishlist', function (e) {\n e.preventDefault();\n const url = $(this).data('url');\n const elMyAccount = $('.account-wishlist-item').length;\n\n // If user is in my account page, call removeWishlistAccount() end point, re-render wishlist cards\n if (elMyAccount > 0) {\n $('.wishlist-account-card').spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'html',\n data: {},\n success: function (html) {\n $('.wishlist-account-card>.card').remove();\n $('.wishlist-account-card').append(html);\n decreaseWishlistCounter();\n bindAddToCart();\n $('.wishlist-account-card').spinner().stop();\n },\n error: function () {\n const $elToAppend = $('.wishlist-account-card');\n $elToAppend.spinner().stop();\n const msg = $elToAppend.data('error-msg');\n displayErrorMessage($elToAppend, msg);\n },\n });\n // else user is in wishlist landing page, call removeProduct() end point, then remove this card\n } else {\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {},\n success: function () {\n decreaseWishlistCounter();\n const pageNumber = $('.wishlistItemCardsData').data('page-number') - 1;\n renderNewPageOfItems(pageNumber, false);\n const backToAccountLink = document.querySelector('.wishlist-page .back-to-account-link');\n const products = document.querySelectorAll('.wishlistItemCards ul li');\n if(isJilSander && backToAccountLink && (products && products.length === 1)) {\n backToAccountLink.classList.add('d-none');\n }\n },\n error: function () {\n $.spinner().stop();\n const $elToAppendWL = $('.wishlistItemCards');\n const msg = $elToAppendWL.data('error-msg');\n displayErrorMessage($elToAppendWL, msg);\n },\n });\n }\n });\n}\n\nfunction checkPrivateSales($privateSales, isUserAuthenticated, customerGroups) {\n const isPrivateSalesProduct = $privateSales.data('isPrivateSalesProduct');\n if (isPrivateSalesProduct) {\n const privateSalesCustomerGroups = $privateSales.data('privateSalesCustomerGroups');\n const privateSalesText = $privateSales.data('privateSalesText');\n const privateSalesTextLoggedIn = $privateSales.data('privateSalesTextLoggedIn');\n\n let isCustomerAllowed = false;\n for (const [productKey, productValue] of Object.entries(privateSalesCustomerGroups)) {\n for (const [customerKey, customerValue] of Object.entries(customerGroups)) {\n if (productValue === customerValue) {\n isCustomerAllowed = true;\n break;\n }\n }\n if (isCustomerAllowed) {\n break;\n }\n }\n\n if (!isCustomerAllowed) {\n if (!isUserAuthenticated) {\n $privateSales.closest('.form-add-to-cart-from-wishlist').addClass('private-sales-product');\n $privateSales.parent().find('span.add-to-cart--wishlist-text').html(privateSalesText);\n\n let loginRemoteContent = $('.login-dropdown [data-remote-content]');\n if (loginRemoteContent.data('remoteContent').indexOf('rurl') < 0) {\n loginRemoteContent.attr('data-remote-content', loginRemoteContent.data('remoteContent') + '?rurl=7');\n }\n } else {\n $privateSales.closest('.form-add-to-cart-from-wishlist').addClass('private-sales-product');\n $privateSales.parent().find('span.add-to-cart--wishlist-text').html(privateSalesTextLoggedIn);\n }\n }\n }\n}\n\nmodule.exports = {\n addToCartFromWishlist: () => {\n bindAddToCart();\n },\n bindCartRecommendations: function () {\n $('body').on('click', '.mm-button.cart-lineitem-recommendation', function(e) {\n var selector = '.' + e.currentTarget.dataset.actionPid;\n if ($(selector)[0].classList.contains('visually-hidden')) {\n $(selector)[0].classList.remove('visually-hidden');\n } else {\n $(selector)[0].classList.add('visually-hidden');\n }\n bindAddToCart();\n });\n },\n addToWishlist: function () {\n $(document).on('click', '.js_add-to-wish-list', function (e) {\n const isActiveWishList = e.currentTarget && e.currentTarget.classList.contains('active');\n if(!isJilSander || (isJilSander && !isActiveWishList)) {\n e.preventDefault();\n }\n const $button = $(this);\n const shouldValidate = $button.data('validateProduct');\n let url = $button.data('add');\n let action = 'add';\n const $alertContainer = $('.js_wishlist-alert-container');\n const $wrapperPdp = $('.product-detail.pdp-new .wrapper-pdp');\n\n function setWrapperStyles() {\n $wrapperPdp.css({\n 'overflow': 'visible',\n 'position': 'relative'\n });\n }\n\n function resetWrapperStyles() {\n $wrapperPdp.css({\n 'overflow': '',\n 'position': ''\n });\n }\n\n if ($button.hasClass('active')) {\n url = $button.data('remove');\n action = 'remove';\n \n if ($alertContainer.hasClass('fade-in')) {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n \n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }\n } else {\n $alertContainer.removeClass('fade-out').addClass('fade-in');\n setWrapperStyles();\n \n let dismissalTimeout = setTimeout(function () {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }, 3000);\n \n $alertContainer.on('mouseenter', function () {\n clearTimeout(dismissalTimeout);\n }).on('mouseleave', function () {\n dismissalTimeout = setTimeout(function () {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }, 3000);\n });\n }\n\n let $productContainer = $button.closest('.set-item');\n\n if (!$productContainer.length) {\n $productContainer = $button.closest('.product-detail');\n }\n\n if ($(this).parent().hasClass('sticky-button') && shouldValidate && addToCartValidation($productContainer) === false) {\n $('html, body').animate(\n {\n scrollTop: $('#sticky-error-scroll-to').offset().top,\n },\n 300\n );\n }\n\n if (shouldValidate && addToCartValidation($productContainer) === false) return;\n\n let pid = e.currentTarget.dataset.pid;\n\n // // Check if the product is a shop the look item\n // let isShopTheLookProduct = $button.closest('.product-detail').hasClass('stl-product-wrapper');\n\n // // Check if the product is a recommender item\n // let isShopTheLookRecommendation = $button.closest('.recommendations-tile').hasClass('stl-recommendation');\n\n // if (isShopTheLookRecommendation) {\n // pid = $button.closest('.recommendations-tile').find('.product').data('pid');\n // } else if (isShopTheLookProduct) {\n // pid = $button.data('pid');\n // } else if ($button.closest('#editWishlistProductModal').length > 0) {\n // pid = base.getPidValue($(this));\n // } else if ($button.closest('#editProductModal').length > 0) {\n // pid = this.dataset.pid;\n // } else if ($button.closest('.product-detail').find('.add-to-cart').length > 0 && $button.closest('.product-detail').find('.add-to-cart').attr('data-pid')) {\n // pid = $button.closest('.product-detail').find('.add-to-cart').attr('data-pid');\n // } else {\n // pid = $button.data('pid');\n // }\n\n let optionId = $button.closest('.product-detail').find('.product-option').attr('data-option-id');\n let optionVal = $button.closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n const wishlistErrorMessage = document.querySelector('.wishlist-error-message');\n $button.addClass('disabled-click');\n $button.attr({'tabindex':-1, 'aria-pressed':true})\n\n const addToWishListError = $('.js-addtowishlist-error');\n const addToWishListErrorText = addToWishListError && addToWishListError.data('addtowishlist-alert');\n const addToWishListErrorMessage = $('.js-addtowishlist-error-message');\n \n if(isJilSander && addToWishListErrorText && addToWishListErrorMessage) {\n if ($('.selected-color').length>0 && $('.do_selectsize.selected').length>0) {\n addToWishListError.addClass('is-hidden');\n } else {\n addToWishListError.removeClass('is-hidden');\n addToWishListErrorMessage.empty().append(addToWishListErrorText);\n return;\n }\n }\n\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal,\n },\n success: function (data) {\n handleResponse(data, $button, action);\n if (isMarni) {\n if (data.wishlistCountOfItems == 'wishlist.count') {\n $('.action.wishlist-icon-selector')[0].classList.remove('icon--heart-new');\n $('.action.wishlist-icon-selector')[0].classList.add('icon--heart-new-red');\n } else {\n $('.action.wishlist-icon-selector')[0].classList.remove('icon--heart-new-red');\n $('.action.wishlist-icon-selector')[0].classList.add('icon--heart-new');\n }\n }\n if(isJilSander && wishlistErrorMessage) {\n if(data.error) {\n wishlistErrorMessage.innerText = data.msg;\n wishlistErrorMessage.classList.remove('d-none');\n } else {\n !wishlistErrorMessage.classList.contains('d-none') && wishlistErrorMessage.classList.remove('d-none');\n }\n }\n if (isMargiela & $('#edit-product-modal.is-open').length > 0) {\n $('#edit-product-modal.is-open .add-to-wish-list-icon')[0].innerHTML = data.label;\n $('#edit-product-modal.is-open .add-to-wish-list-icon')[1].innerHTML = data.label;\n }\n },\n error: function (err) {\n handleResponse(err, $button, action);\n },\n });\n });\n\n $(document).on('click', '.js_add-to-wish-list-cart', function (e) {\n e.preventDefault();\n const $button = $(this);\n\n if ($button.hasClass('active')) {\n return;\n }\n\n const url = $button.data('href');\n const pid = $button.data('pid');\n\n if (!url || !pid) {\n return;\n }\n \n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n },\n success: function (data) {\n $button.addClass('active');\n handleResponse(data, $button);\n },\n error: function (err) {\n handleResponse(err, $button);\n },\n });\n });\n },\n removeFromWishlist: function () {\n bindRemoveFromWishlist();\n },\n addAllToCart: function () {\n $('body').on('click', '.js_add-all-to-cart', function () {\n $('body').trigger('product:beforeAddToCart', this);\n const addToCartUrl = document.querySelector('input[name=\"global-add-to-cart-url\"]')\n ? document.querySelector('input[name=\"global-add-to-cart-url\"]').value\n : null;\n const pidsObj = [];\n [\n ...document.querySelectorAll(\n '.wishlistItemCards .product-grid-container .product-tile__actions form[name=\"add-to-cart-from-wishlist\"]'\n ),\n ].forEach((item) => {\n if (addToCartValidation($(item))) {\n if (item.querySelector('input[name=\"ean\"]') && !item.classList.contains('private-sales-product')) {\n const pid = item.querySelector('input[name=\"ean\"]').value;\n pidsObj.push({\n pid: pid,\n qty: 1,\n });\n }\n }\n });\n\n if (addToCartUrl && pidsObj.length > 0) {\n const form = {\n pidsObj: JSON.stringify(pidsObj),\n };\n\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n let currentQty = 0;\n $('.js-quantity.quantity.counter').each(function(i,e){\n currentQty = parseInt($(e).text());\n });\n if (data.quantityTotal > currentQty) {\n // Tealium event \"Cart Add Full List\"\n data.addAllProductsFromWishList = true;\n $('body').trigger('product:afterAddToCart', data);\n $('.minicart-action').trigger('click');\n $('.js-quantity.quantity.counter').text(data.quantityTotal);\n }\n\n $.spinner().stop();\n },\n complete: function () {\n $.spinner().stop();\n },\n });\n }\n });\n },\n updateSelectAttr : function () {\n $('body').on('click', '.wishlist-container_select button.fsb-button' ,function(){\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n }\n })\n },\n};\n","'use strict';\n\nconst isMargiela = document.body.dataset.sitebrand === \"Margiela\";\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n $(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\nmodule.exports = function (formElement, payload) {\n // clear form validation first\n clearFormErrors(formElement);\n $('.alert', formElement).remove();\n\n if (typeof payload === 'object' && payload.fields) {\n Object.keys(payload.fields).forEach(function (key) {\n if (payload.fields[key]) {\n let feedbackElement = $(formElement)\n .find('[name=\"' + key + '\"]')\n .parent()\n .children('.invalid-feedback');\n\n if (feedbackElement.length > 0) {\n if (Array.isArray(payload[key])) {\n feedbackElement.html(payload.fields[key].join('<br/>'));\n } else {\n feedbackElement.html(payload.fields[key]);\n }\n feedbackElement.siblings('.form-control').addClass('is-invalid');\n }\n }\n });\n }\n if (payload && payload.error) {\n let form = $(formElement).prop('tagName') === 'FORM' ? $(formElement) : $(formElement).parents('form');\n const content = '<div class=\"alert alert-danger invalid-feedback\" role=\"alert\">' + payload.error.join('<br/>') + '</div>';\n if (isMargiela && form.attr('name') === 'login-form') {\n form.find('.remember-me-section').before(content);\n } else {\n form.prepend(content);\n }\n }\n};\n","'use strict';\n\nconst delimiter = ':';\nconst $body = $('body');\nconst $document = $(document);\n\n$document.ready(function(){\n $body.trigger('tealiumEvents:loaded');\n});\n\nfunction utagExists(){\n return typeof utag !== 'undefined';\n}\n\n/**\n* Gets a parameter from a link or from [window.location.href]\n*/\nfunction refreshCartData() {\n const url = window.sfcc_urls.refresh_utag_basket;\n\n if (window.location.href.indexOf('Order-ReturnConfirmation') > 0) {\n return;\n }\n\n $.ajax({\n url: url,\n method: 'GET',\n dataType: 'json',\n success: function(data) {\n copyResponseData(data);\n },\n error: function(err) {\n console.log('error refreshing utag', err);\n }\n });\n}\n\n/**\n* Gets a parameter from a link or from [window.location.href]\n* @param {string} paramName - the parameter name\n* @param {string} url - [window.location.href] or equivalent\n* @returns {string} the parameter value or [null]\n*/\nfunction getParameterByName(paramName, url = window.location.href) {\n const name = paramName.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\n/**\n* Get selected variation value by variation id\n* @param {Object} variationAttributes - variation attributes model from backend\n* @param {string} id - variation id\n* @returns {string} the id of the variation value or empty string\n*/\nfunction getVariationValue(variationAttributes, id) {\n let result = '';\n\n if (variationAttributes instanceof Array) {\n const variation = variationAttributes.filter((i) => i.attributeId === id);\n\n if (variation && variation.length) {\n const selected = variation[0].values.filter((i) => i.selected === true);\n if (selected && selected.length) result = selected[0].id;\n }\n }\n\n return result;\n}\n\n/**\n* Use the existing data from the [utag_data] object to fill [utag.data] with product data on PDP\n*/\nfunction addProductData() {\n utag.data.page_type = 'product';\n utag.data.product_id = utag_data.product_id;\n utag.data.product_name = utag_data.product_name;\n utag.data.product_season = utag_data.product_season;\n utag.data.product_newin = utag_data.product_newin;\n utag.data.product_category = utag_data.product_category;\n utag.data.product_color = utag_data.product_color;\n utag.data.product_waist = utag_data.product_waist;\n utag.data.product_length = utag_data.product_length;\n utag.data.product_size = utag_data.product_size;\n utag.data.product_unit_price = utag_data.product_unit_price;\n utag.data.product_old_price = utag_data.product_old_price;\n utag.data.product_sale_price = utag_data.product_sale_price;\n utag.data.product_net_price = utag_data.product_net_price;\n}\n\n/**\n* Use the existing data from the [utag_data] object to fill [utag.data] with product data on Cart/Checkout\n*/\nfunction addCartData() {\n utag.data.page_type = 'checkout';\n utag.data.product_id = utag_data.product_id;\n utag.data.product_name = utag_data.product_name;\n utag.data.product_season = utag_data.product_season;\n utag.data.product_newin = utag_data.product_newin;\n utag.data.product_category = utag_data.product_category;\n utag.data.product_color = utag_data.product_color;\n utag.data.product_waist = utag_data.product_waist;\n utag.data.product_length = utag_data.product_length;\n utag.data.product_size = utag_data.product_size;\n utag.data.product_unit_price = utag_data.product_unit_price;\n utag.data.product_old_price = utag_data.product_old_price;\n utag.data.product_sale_price = utag_data.product_sale_price;\n utag.data.product_net_price = utag_data.product_net_price;\n utag.data.product_quantity = utag_data.product_quantity;\n utag.data.product_shipping_type = utag_data.product_shipping_type;\n utag.data.order_currency = utag_data.order_currency;\n\n if (utag_data.order_track_id) {\n utag.data.order_track_id = utag_data.order_track_id;\n }\n}\n\n/**\n * Copies the `utagData` object values to the current utag data object\n * @param {Object} response - the response object from the server that contains a `utagData` object\n */\nfunction copyResponseData(response) {\n if (!response) return;\n\n for (const key in response.utagData) { // eslint-disable-line no-restricted-syntax\n if (response.utagData.hasOwnProperty(key)) { // eslint-disable-line no-prototype-builtins\n utag.data[key] = response.utagData[key];\n }\n }\n}\n\nfunction concatUtagValues(nodeList, key){\n for (let i = 0; i < nodeList.length; i++) {\n var value = nodeList[i].value;\n var arrayValue = value.replaceAll('[','').replaceAll(']','').replaceAll(' ','').split(',');\n var original = utag.data[key];\n\n if(original) {\n let mergedArray = original.concat(arrayValue);\n mergedArray = mergedArray.filter((item,index) => {\n return (mergedArray.indexOf(item) == index);\n }); \n utag.data[key] = mergedArray;\n }\n }\n}\n\nfunction newsletterEventTrigger(gender) {\n\n if (!gender) gender = '';\n\n utag.data.page_type = 'newsletter';\n utag.data.page_name = utag_data.store_country + delimiter + 'myaccount' + delimiter + 'newsletter_subscription';\n utag.data.event_name = 'newsletter_subscription_' + gender;\n utag.link(utag.data);\n}\n\nmodule.exports = {\n loadMoreProduct: function(){\n $body.on('product:listing-show-more', function(){\n var utag_product_id = document.querySelectorAll('[name=\"utag_product_id\"]');\n \n concatUtagValues(utag_product_id, 'product_id');\n });\n },\n\n pageNewsletter: function() {\n $body.on('newsletter:submit', function() {\n if (typeof utag === 'undefined' || !utag) return;\n const $form = $('.page-newsletter .form-newsletter');\n \n $form.find('.gender-check:checked +.checkbox-label').text().trim();\n let genders = [];\n let gender;\n let isMultipleGender = false;\n document.querySelectorAll('.gender-check:checked + .checkbox-label').forEach(g => {\n genders.push(g.innerText);\n isMultipleGender = genders.length > 1;\n });\n gender = isMultipleGender ? 'Both' : genders[0];\n newsletterEventTrigger(gender);\n });\n },\n\n footerNewsletter: function() {\n $body.on('click', 'footer .form-newsletter [type=\"submit\"]', function() {\n if (typeof utag === 'undefined' || !utag) return;\n const $form = $('footer .form-newsletter');\n const gender = $form.find('[name=\"gender-radio\"]:checked').val(); \n newsletterEventTrigger(gender);\n });\n },\n\n video: function() {\n const $video = $('video');\n\n $video.on('pause', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.currentTime;\n utag.data.event_name = 'video_pause';\n utag.track('video', utag.data);\n });\n\n $video.on('loadeddata', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.duration;\n utag.data.event_name = 'video_open';\n utag.track('video', utag.data);\n });\n\n $video.on('play', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.currentTime;\n\n if (this.currentTime > 0) {\n utag.data.event_name = 'video_play';\n } else {\n utag.data.event_name = 'video_start';\n }\n\n utag.track('video', utag.data);\n });\n },\n\n PLPUpdateData: function() {\n // Update data for future events\n $body.on('plp:plpPageLoad', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n\n\n var activePLP = 'old';\n\n if ($('.new-page-search-result').length > 0) {\n activePLP = 'new';\n }\n\n utag_data.active_plp = activePLP;\n });\n },\n\n PDPUpdateData: function() {\n // Update data for future events\n $body.on('product:afterAttributeSelect', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n\n\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n\n const product = response.data.product;\n utag_data.active_pdp = activePDP;\n utag_data.product_sku = [product.id];\n utag_data.product_color = [getVariationValue(product.variationAttributes, 'color')];\n utag_data.product_waist = [getVariationValue(product.variationAttributes, 'waist')];\n utag_data.product_length = [getVariationValue(product.variationAttributes, 'length')];\n utag_data.product_size = [getVariationValue(product.variationAttributes, 'size')];\n });\n },\n\n addToCart: function() {\n $body.on('product:afterAddToCart', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addProductData();\n\n\n\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n\n if (utag_data.page_context_type === 'product') {\n utag.data.event_name = 'pdp_cart_add';\n } else if (response.addAllProductsFromWishList) {\n utag.data.event_name = 'cart_add_wishlist_full';\n } else if (utag_data.page_context_type === 'myaccount') {\n utag.data.event_name = 'cart_add_wishlist_prod';\n } else {\n utag.data.event_name = utag_data.page_type + 'pdp_cart_add';\n }\n\n utag.link(utag.data);\n });\n },\n\n backInStock: function() {\n $body.on('product:afterBackInStock', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addProductData();\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n\n utag.data.event_name = 'pdp_backinstock';\n\n utag.link(utag.data);\n });\n },\n\n PDPAddToWishlist: function() {\n $body.on('product:afterAddToWishlist', function() {\n if (typeof utag === 'undefined' || !utag || !utag_data.page_context_type === 'product') return;\n\n addProductData();\n var activePDP = 'old';\n if (utag_data.page_context_type == \"product set\") {\n var productSetIDs = [''];\n for (i = 0 ; i < $('.product-set-item').length; i++) {\n if (i +1 < $('.product-set-item').length) {\n productSetIDs[0] += $('.product-set-item')[i].dataset.pid + ', ';\n } else {\n productSetIDs[0] += $('.product-set-item')[i].dataset.pid;\n }\n }\n utag.data.product_id = productSetIDs;\n utag.data.page_type = 'product set';\n }\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n utag.data.event_name = 'pdp_wishlist_add';\n utag.link(utag.data);\n });\n },\n\n storeLocatorFind: function() {\n $body.on('store:MyLocation', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.page_type = 'store locator';\n utag.data.page_name = utag.data.page_name + ':my location';\n utag.data.event_name = 'storelocator_mylocation';\n utag.link(utag.data);\n });\n },\n\n storeLocatorMyLocation: function() {\n $body.on('store:Search', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.page_type = 'store locator';\n utag.data.page_name = utag.data.page_name + ':search location';\n utag.data.event_name = 'storelocator_search';\n utag.link(utag.data);\n });\n },\n\n filters: function() {\n $document.on('appliedFilter', function(e) {\n\n var url;\n if (typeof utag === 'undefined' || !utag) {return;} \n \n if (typeof e.url !== 'undefined' && e.url) {\n url = e.url;\n };\n\n if (!url) {\n url = (e.detail && e.detail.url) ? e.detail.url : null; \n }\n\n if (!url){\n return;\n }\n\n const result = [];\n\n const pmin = getParameterByName('pmin', url);\n const pmax = getParameterByName('pmax', url);\n\n if (pmin && pmax) {\n result.push('price' + delimiter + pmin + ' to ' + pmax);\n }\n\n let i = 1;\n let name = getParameterByName('prefn' + i, url);\n let value;\n let subArray;\n\n while (name) {\n value = getParameterByName('prefv' + i, url);\n name = name.replace('refinement', '');\n\n if (value.indexOf('|') > -1) { // Multiple values for this preference\n subArray = value.split('|');\n\n for (let j = 0; j < subArray.length; j++) {\n result.push(name + delimiter + subArray[j]);\n }\n } else { // Single value for this preference\n result.push(name + delimiter + value);\n }\n\n i++;\n name = getParameterByName('prefn' + i, e.url);\n }\n\n if (result.length > 0) {\n utag.data.filter = result;\n utag.data.event_name = 'filter_usage';\n utag.link(utag.data);\n }\n });\n },\n\n checkoutStages: function() {\n $body.on('checkout:stageGoTo checkout:updatedCheckoutView', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n let step = '';\n const stage = $('#checkout-main').attr('data-checkout-stage');\n\n if (stage === 'shipping') {\n step = 'step1';\n } else if (stage === 'payment') {\n step = 'step2';\n } else if (stage === 'placeOrder') {\n step = 'step3';\n }\n\n utag.data.page_name = utag_data.page_name_onload.replace(/step\\d/gi, step);\n utag.link(utag.data);\n });\n },\n\n login: function() {\n $body.on('user:loggedIn', function() {\n if (typeof utag === 'undefined' || !utag) return;\n utag.data.event_name = 'login_ok';\n utag.link(utag.data);\n });\n },\n\n register: function() {\n $body.on('user:registered', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.event_name = 'registration_ok';\n utag.link(utag.data);\n });\n },\n\n fastCheckout: function() {\n $body.on('checkout:fastCheckoutStart', function(event, cartType, buttonPosition) {\n if (typeof utag === 'undefined' || !utag) return;\n\n if(typeof cartType !== 'undefined' && typeof buttonPosition !== 'undefined') {\n utag.data.cart_type = cartType + ':' + buttonPosition;\n }\n utag.data.event_name = 'fastcheckout_start';\n utag.link(utag.data);\n });\n },\n\n cartModifyModalOpen: function() {\n $body.on('cart:modifyProductOpen', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n utag.data.event_name = 'cart_prod_update_popup';\n utag.link(utag.data);\n });\n },\n\n cartModifyModalConfirm: function() {\n $body.on('cart:productModified', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_prod_update_confirm';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartRemoveProduct: function() {\n $body.on('cart:productRemoved', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_prod_update';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartMoveToPickup: function() {\n $body.on('cart:pickUpItem', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_moveto_pickup';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartShipItem: function() {\n $body.on('cart:shipItem', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_moveto_shipping';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartStoreDialogOpen: function() {\n $body.on('findInStore:open', function() {\n if (typeof utag === 'undefined' || !utag) return;\n if ($('.page').data('action') !== 'Cart-Show') return;\n\n addCartData();\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_store_detail_popup';\n utag.link(utag.data);\n });\n },\n\n cartStoreChanged: function() {\n $body.on('cart:storeChanged', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_store_detail_change';\n utag.link(utag.data);\n });\n },\n\n helpOrderDetails: function() {\n $body.on('help:orderDetailsOpened', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_name = `${utag.data.store_country}:order_track:detail ${utag.data.order_track_id}`;\n utag.data.page_type = 'order track';\n utag.view(utag.data);\n });\n },\n\n createReturnSteps: function() {\n $body.on('order:createReturn:step2', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:step2`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:step2';\n utag.view(utag.data);\n });\n $body.on('order:createReturn:step3', function(e, params) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n \n utag.data.product_return_type = params.types;\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:step3`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:step3';\n utag.view(utag.data);\n });\n $body.on('order:createReturn:thank-you', function(e, params) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n utag.data.product_return_type = params.types;\n\n if (!utag.data.order_track_id){\n let searchParams = (new URL(document.location)).searchParams;\n let orderID = searchParams.get('orderID');\n utag.data.order_track_id = orderID;\n }\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:thank you`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:thank you';\n });\n },\n\n /**\n * Method to track events and collect information about customers\n */\n updateCustomerAttributes: function() {\n if (utagExists()) {\n $body.on('customer:updateAttributes', function() {\n const url = $('.get-customer-profile-url').attr('data-get-customer-profile');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n if (typeof utag === 'undefined' || !utag || !data.success) return;\n\n for (const key in data.customerProfileAttributes) {\n if (data.customerProfileAttributes.hasOwnProperty(key)) {\n utag.data[key] = data.customerProfileAttributes[key];\n }\n }\n\n utag.link(utag.data);\n $body.trigger('datalayer:redirectUrl');\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n });\n }\n },\n /**\n * Method to track events and collect information about cart and wishlist\n */\n updateCartAndWishlist: function() {\n if (utagExists()) {\n $(document).ready(function() {\n /* Persist wishlist variable */\n\n var url = $('.get-datalayer-wishlist-url').attr('data-datalayer-wishlist');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n var persist_wishlist = {\n item: data.item,\n total_with_vat: data.total_with_vat,\n currency: data.currency\n };\n utag.data['persist_wishlist'] = persist_wishlist;\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n\n /* Persist cart variable */\n url = $('.get-datalayer-cart-url').attr('data-datalayer-cart');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n var persist_cart = {\n item: data.item,\n total_without_vat: data.total_without_vat,\n total_with_vat: data.total_with_vat,\n currency: data.currency\n };\n utag.data['persist_cart'] = persist_cart;\n\n jQuery('body').trigger('cart_wishlist_updated');\n\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n });\n }\n },\n\n setListViewType: function() {\n $(\".js-change-view-toggle\").click(function() {\n let viewType = $(\".js-change-view-toggle.active\").attr('data-layout');\n\n if (viewType == 'single') {\n utag.data.list_view_type = 'outfit view';\n } else {\n utag.data.list_view_type = 'product view';\n }\n utag.link(utag.data);\n });\n },\n\n\n searchOpen: function() {\n $body.on('search:open', function() {\n if (utagExists()) {\n utag.data.page_name = utag.data.store_country + ':search:open';\n // utag.data.page_type = 'search';\n // utag.data.event_name = 'search_open';\n // utag.link(utag.data);\n let page_name = utag.data.store_country + ':search:open';\n \n utag.view({\n 'page_name' : page_name,\n 'view_name': utag.data.store_country + ':search:open',\n 'page_type' : 'search',\n \"tealium_event\" : 'search',\n 'event_name' : 'search_open',\n 'event_category' : 'searchOpen',\n 'event_action' : 'click'\n });\n }\n });\n },\n\n\n searchTypeKeyword: function() {\n $body.on('search:searchKeyword', function(e, response) {\n if (utagExists()) {\n let names = [];\n let skus = [];\n for (let i = 0; i < response.suggestions.length; i++) {\n if (response.suggestions[i].dataset.productName) {\n names.push(response.suggestions[i].dataset.productName);\n }\n if (response.suggestions[i].dataset.pid) {\n skus.push(response.suggestions[i].dataset.pid);\n }\n }\n if (typeof utag === 'undefined' || !utag) return;\n utag.data.page_name = `${utag.data.store_country}:search:inline result`;\n // utag.data.page_type = 'search';\n // utag.data.search_results = response.suggestions.length;\n // utag.data.search_term = $('.search-field').val();\n // utag.data.product_impression_name = names.toString();\n // utag.data.product_impression_sku = skus.toString();\n // utag.data.event_name = 'search_inline';\n // utag.view(utag.data);\n\n\n utag.view({\n 'page_name' : utag.data.store_country + ':search:inline result',\n 'view_name': utag.data.store_country + ':search:inline result',\n 'page_type' : 'search',\n \"tealium_event\" : 'search',\n 'search_results' : response.suggestions.length,\n 'search_term' : $('.search-field').val(),\n 'product_name' : names,\n 'product_sku' : skus,\n 'event_name' : 'search_inline',\n 'event_category' : 'searchInline',\n 'event_action' : 'typeKeywords'\n });\n }\n });\n },\n\n searchProductClick: function() {\n $body.on('click', '.search-suggestion-list-item', function(e) {\n if (utagExists()) {\n utag.data.page_name = `${utag.data.store_country}:search:inline result`;\n // utag.data.page_type = 'search';\n // utag.data.search_term = $('.search-field').val();\n // utag.data.search_result_type = e.currentTarget.dataset.type;\n // utag.data.search_result_value = e.currentTarget.ariaLabel;\n // utag.data.product_impression_name = e.currentTarget.ariaLabel;\n // utag.data.product_impression_sku = e.currentTarget.dataset.pid;\n // utag.data.event_name = 'search_inline_click';\n // utag.view(utag.data);\n let page_name = utag.data.store_country + ':search:inline result';\n let name = [e.currentTarget.ariaLabel];\n let sku = [e.currentTarget.dataset.pid];\n\n\n utag.view({\n 'page_name' : page_name,\n 'view_name': utag.data.store_country + ':search:inline result',\n \"tealium_event\" : 'search',\n 'page_type' : 'search',\n 'search_term' : $('.search-field').val(),\n 'search_result_type' : e.currentTarget.dataset.type,\n 'search_result_value' : e.currentTarget.ariaLabel,\n 'product_name' : name,\n 'product_sku' : sku,\n 'event_name' : 'search_inline_click',\n 'event_category' : 'searchInlineClick',\n 'event_action' : 'searchClick'\n });\n }\n });\n },\n\n\n searchSend: function() {\n $body.on('search:send', function() {\n if (utagExists()) {\n utag.view({\n 'page_name' : utag.data.store_country + ':search send',\n 'page_section' : 'search',\n 'page_type' : 'search',\n 'search_term' : $('.search-field').val(),\n 'event_name' : 'search_ok',\n });\n utag.link(utag.data);\n }\n });\n },\n\n searchResultsPage: function() {\n if (utagExists()) {\n $body.on('search:searchResultsPage', function() {\n let names = [];\n let skus = [];\n let product = $('.product');\n for (let i = 0; i < product.length; i++) {\n if (product[i].dataset.productName) {\n names.push(product[i].dataset.productName);\n }\n if (product[i].dataset.pid) {\n skus.push(product[i].dataset.pid);\n }\n }\n utag.data.page_name = utag.data.store_country + ':search';\n // utag.data.page_type = 'search';\n // utag.data.list_view_type = 'product view';\n // utag.data.product_impression_name = names.toString();\n // utag.data.product_impression_sku = skus.toString();\n\n\n utag.view({\n 'page_name' : utag.data.store_country + ':search',\n 'view_name': utag.data.store_country + ':search', \n \"tealium_event\" : 'search',\n 'page_type' : 'search',\n 'list_view_type' : 'product view',\n 'search_term' : $('.search-field').val(),\n 'product_name' : names,\n 'product_sku' : skus,\n 'event_name' : 'search_results_page',\n 'event_category' : 'searchResults',\n 'event_action' : 'resultsLoad'\n });\n });\n }\n }\n};\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","/**\n * Swiper 8.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2022 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 24, 2022\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n})(this, (function () { 'use strict';\n\n /**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n\n /* eslint-disable no-param-reassign */\n function isObject$1(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n }\n\n function extend$1(target, src) {\n if (target === void 0) {\n target = {};\n }\n\n if (src === void 0) {\n src = {};\n }\n\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n extend$1(target[key], src[key]);\n }\n });\n }\n\n const ssrDocument = {\n body: {},\n\n addEventListener() {},\n\n removeEventListener() {},\n\n activeElement: {\n blur() {},\n\n nodeName: ''\n },\n\n querySelector() {\n return null;\n },\n\n querySelectorAll() {\n return [];\n },\n\n getElementById() {\n return null;\n },\n\n createEvent() {\n return {\n initEvent() {}\n\n };\n },\n\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n\n setAttribute() {},\n\n getElementsByTagName() {\n return [];\n }\n\n };\n },\n\n createElementNS() {\n return {};\n },\n\n importNode() {\n return null;\n },\n\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n };\n\n function getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend$1(doc, ssrDocument);\n return doc;\n }\n\n const ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n\n pushState() {},\n\n go() {},\n\n back() {}\n\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n\n addEventListener() {},\n\n removeEventListener() {},\n\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n\n };\n },\n\n Image() {},\n\n Date() {},\n\n screen: {},\n\n setTimeout() {},\n\n clearTimeout() {},\n\n matchMedia() {\n return {};\n },\n\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n\n return setTimeout(callback, 0);\n },\n\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n\n clearTimeout(id);\n }\n\n };\n\n function getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend$1(win, ssrWindow);\n return win;\n }\n\n /**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\n /* eslint-disable no-proto */\n\n function makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n }\n\n class Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n }\n\n function arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n }\n\n function arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n }\n\n function arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n }\n\n\n function qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n }\n\n function $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n }\n\n $.fn = Dom7.prototype; // eslint-disable-next-line\n\n function addClass() {\n for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n classes[_key] = arguments[_key];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n }\n\n function removeClass() {\n for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n classes[_key2] = arguments[_key2];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n }\n\n function toggleClass() {\n for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n classes[_key3] = arguments[_key3];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n }\n\n function hasClass() {\n for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n classes[_key4] = arguments[_key4];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n }\n\n function attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n }\n\n function removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n }\n\n function transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n }\n\n function transition$1(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n }\n\n function on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n }\n\n function off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n }\n\n function trigger() {\n const window = getWindow();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n }\n\n function transitionEnd$1(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n }\n\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n }\n\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n }\n\n function offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n }\n\n function styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n }\n\n function css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n }\n\n function each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n }\n\n function filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n }\n\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n }\n\n function text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n }\n\n function is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n }\n\n function index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n }\n\n function eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n }\n\n function append() {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n\n function prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n }\n\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n }\n\n function prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n }\n\n function parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n }\n\n function parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n }\n\n function closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n }\n\n function find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n }\n\n function children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n }\n\n function remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n }\n\n const Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition: transition$1,\n on,\n off,\n trigger,\n transitionEnd: transitionEnd$1,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n };\n Object.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n });\n\n function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n }\n\n function nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n }\n\n function now() {\n return Date.now();\n }\n\n function getComputedStyle$1(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n }\n\n function getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle$1(el);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n }\n\n function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n }\n\n function isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n }\n\n function extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n }\n\n function setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n }\n\n function animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n }\n\n let support;\n\n function calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n }\n\n function getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n }\n\n let deviceCached;\n\n function calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n }\n\n function getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n }\n\n let browser;\n\n function calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n }\n\n function getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n }\n\n function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n }\n\n function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n }\n\n /* eslint-disable no-underscore-dangle */\n var eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n };\n\n function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n }\n\n function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n }\n\n function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n }\n\n function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n }\n\n function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n };\n\n function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n }\n\n function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate() {\n return -this.snapGrid[0];\n }\n\n function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n }\n\n function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n var translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n };\n\n function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n }\n\n function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n }\n\n function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n }\n\n var transition = {\n setTransition,\n transitionStart,\n transitionEnd\n };\n\n function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n }\n\n function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n };\n\n function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n }\n\n function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate,\n loopFix,\n loopDestroy\n };\n\n function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n };\n\n function closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n }\n\n function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n }\n\n let dummyEventAttached = false;\n\n function dummyEventListener() {}\n\n const events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n };\n\n function attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n }\n\n function detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n }\n\n var events$1 = {\n attachEvents,\n detachEvents\n };\n\n const isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n };\n\n function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n\n function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n }\n\n var breakpoints = {\n setBreakpoint,\n getBreakpoint\n };\n\n function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n }\n\n function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n }\n\n function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n }\n\n var classes = {\n addClasses,\n removeClasses\n };\n\n function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n }\n\n var images = {\n loadImage,\n preloadImages\n };\n\n function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n }\n\n var checkOverflow$1 = {\n checkOverflow\n };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n };\n\n function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n }\n\n /* eslint no-param-reassign: \"off\" */\n const prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images\n };\n const extendedDefaults = {};\n\n class Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n }\n\n Object.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n });\n Swiper.use([Resize, Observer]);\n\n function Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n emit('virtualUpdate');\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n }\n\n /* eslint-disable consistent-return */\n function Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n }\n\n /* eslint-disable consistent-return */\n function Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n } // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n } // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n\n\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n }; // Keep the most recent events\n\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n }\n\n function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n }\n\n function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n }\n\n function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n }\n\n function Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n }\n\n function Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n }\n\n function Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n }\n\n function Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n }\n\n function Lazy(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate) {\n if (loadInDuplicate === void 0) {\n loadInDuplicate = true;\n }\n\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n }\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n function Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n }\n\n function A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handleFocus = e => {\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n function init() {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n addElRole($(swiper.slides), params.slideRole);\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n }); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n }\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n }\n\n function History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides'\n }\n });\n let initialized = false;\n let paths = {};\n\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\n\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n }\n\n function HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n }\n\n /* eslint no-underscore-dangle: \"off\" */\n function Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n }\n\n function Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n } // Activate thumbs\n\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n }\n\n function freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n }\n\n function Grid(_ref) {\n let {\n swiper,\n extendParams\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n }\n\n function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n }\n\n function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n }\n\n function Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n }\n\n function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n }\n\n function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n }\n\n function effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformEl,\n allSlides\n } = _ref;\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n\n function EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n\n const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n $slideEl.append(shadowAfter);\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.each(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows($(slideEl), progress, isHorizontal);\n });\n };\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, isHorizontal);\n }\n }\n\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n }\n\n function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n }\n\n function EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const createSlideShadows = ($slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.each(slideEl => {\n const $slideEl = $(slideEl);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n\n createSlideShadows($slideEl, progress, params);\n });\n };\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, params);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n }\n\n function EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const {\n slides,\n $wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n rotate: true\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n // Swiper Class\n const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n Swiper.use(modules);\n\n return Swiper;\n\n}));\n//# sourceMappingURL=swiper-bundle.js.map\n","'use strict';\n\nlet formCleared = false;\n\n/**\n * Additional class to invalid-feed back when input field is changed\n * @param {HTMLElement} input input field\n */\nfunction triggerEdgeValidation(input) {\n if (!input || !input.nextElementSibling) return;\n if (!input.nextElementSibling.classList.contains('invalid-feedback')) return;\n\n const invalidFeedback = input.nextElementSibling;\n invalidFeedback.classList.toggle('edge-validation-fix');\n}\n\n/**\n * Scroll to first error in given form (if there is any)\n * @param {JQuery} $form - jQuery object containing form\n */\nfunction scrollToError($form) {\n if ($form.find('.is-invalid,.-invalid').length && !$form.parents('.modal').length) {\n $('html, body').animate(\n {\n scrollTop: $form.find('.is-invalid,.-invalid').first().offset().top - 25,\n },\n 500\n );\n $form.find('.is-invalid:first,.-invalid:first').focus();\n }\n}\n\n/**\n * Check if the user has done the reCaptcha and return true if so\n * @param {jQuery} $form - the from which contains the reCaptcha\n * @returns {boolean} whether the reCaptcha is entered or not\n */\nfunction validateReCaptcha($form) {\n const $response = $form.find('[name=g-recaptcha-response]');\n let valid;\n\n if ($response.length && $response.val()) {\n // ReCaptcha found and valid\n valid = true;\n } else if ($response.length) {\n // ReCaptcha found but not valid\n valid = false;\n } else {\n // ReCaptcha not found\n valid = true;\n }\n\n $response.parent().toggleClass('highlight-recaptcha', !valid);\n return valid;\n}\n\n/**\n * Validate whole form. Requires `this` to be set to form object\n * @param {jQuery.event} event - Event to be canceled if form is invalid.\n * @returns {boolean} - Flag to indicate if form is valid\n */\nfunction validateForm(event) {\n let valid = true;\n\n if (!validateReCaptcha($(this)) || (this.checkValidity && !this.checkValidity())) {\n // safari\n valid = false;\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n $(this)\n .find('input, select, textarea')\n .each(function () {\n if (!this.validity.valid) {\n $(this).trigger('invalid', this.validity);\n }\n });\n }\n\n return valid;\n}\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element|jQuery} form - Form to be cleared. Could be plain JS object or jQuery object\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n let $form = form;\n\n // Transform to jQuery object if plain JS object is passed.\n if (!form.jquery) {\n $form = $(form);\n }\n\n $form.find('.form-control.is-invalid').removeClass('is-invalid');\n $form.find('.form-control.is-valid').removeClass('is-valid');\n // margiela\n $form.find('.-invalid').removeClass('-invalid');\n $form.find('-valid').removeClass('-valid');\n \n $form.find('.invalid-feedback').empty();\n}\n\n/**\n * Init the handlers for events which doesn't bubble.\n * No bubbling means that body, document or element's container cannot be used for that event\n * and the exact element should be selected instead.\n * This is not a problem on initial load but doesn't work on html loaded with Ajax\n * and this is why this method is needed so we can re-attach the event handlers.\n * @returns {void}\n */\nfunction attachNoBubbleEvents() {\n let attachTimeout;\n $('form input, form select, form textarea')\n .off('invalid')\n .on('invalid', function (e) {\n e.preventDefault();\n this.setCustomValidity('');\n const $form = $(this).parents('form');\n triggerEdgeValidation(this);\n\n if (!this.validity.valid) {\n $(this).removeClass('is-valid -valid');\n $(this).addClass('is-invalid -invalid');\n\n const id = $(this).attr('id');\n const fieldMessages = window.formValidationMessages[id];\n\n if (fieldMessages) {\n // Important:\n // for-in statement was the only possible solution in this case.\n // ValidityState has no enumerable properties hence Object.keys() wouldn't work.\n let key;\n\n for (key in this.validity) {\n // eslint-disable-line no-restricted-syntax, guard-for-in\n if (key !== 'valid') {\n if (this.validity[key] && fieldMessages[key]) {\n this.setCustomValidity(fieldMessages[key]);\n break;\n }\n }\n }\n }\n\n $(this).parents('.form-group').find('.invalid-feedback').text(this.validationMessage);\n $(this).parents('[class^=\"mm-form\"]').find('.invalid-feedback').text(this.validationMessage);\n\n clearTimeout(attachTimeout);\n attachTimeout = setTimeout(function () {\n $body.trigger('validation:afterReattachInvalid', { $form });\n }, 50);\n }\n });\n}\n\n/**\n * Clear errors from form fields (includes messeges and visual feedback)\n * @param {JQuery} $form - jquery form object\n */\nfunction clearFormFieldErrors($form) {\n $form.siblings('.invalid-feedback').empty();\n $form.removeClass('is-invalid -inalid');\n $form.addClass('is-valid -valid');\n\n $form.find('input').each((i, e) => {\n triggerEdgeValidation(e);\n });\n}\n\nmodule.exports = {\n noBubbleEvents: attachNoBubbleEvents,\n\n init: function (additionalMessagesStr) {\n window.formValidationMessages = {};\n\n let additionalMessages;\n\n if (additionalMessagesStr) {\n try {\n additionalMessages = JSON.parse(additionalMessagesStr);\n } catch (e) {\n window.console.warn(e);\n }\n }\n\n const $formMessages = $('.js-form-messages');\n\n if ($formMessages.length) {\n try {\n window.formValidationMessages = JSON.parse($formMessages.text());\n } catch (e) {\n window.console.warn(e);\n }\n }\n\n if (additionalMessages) {\n $.extend(window.formValidationMessages, additionalMessages);\n }\n\n },\n\n submit: function () {\n $body.on('submit', 'form', function (e) {\n return validateForm.call(this, e);\n });\n },\n\n buttonClick: function () {\n $body.on('click', 'form button[type=\"submit\"], form input[type=\"submit\"]', function () {\n // clear all errors when trying to submit the form\n const $form = $(this).parents('form');\n clearFormErrors($form);\n validateReCaptcha($form);\n formCleared = true;\n });\n },\n\n focusOut: function () {\n $body.on('focusout', 'form input:not(.validate-on-change), form select:not(.validate-on-change), form textarea', function (e) {\n const $this = $(e.target);\n $this.siblings('.field-description').remove();\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n blur: function () {\n $body.on('blur', 'form input:not(.validate-on-change), form select:not(.validate-on-change), form textarea', function (e) {\n const $this = $(e.target);\n\n const removeWhitespaces = $($this).val();\n const cleanString = removeWhitespaces.replace(/^\\s+|\\s+$/g, '');\n $($this).val(cleanString);\n $this.siblings('.field-description').remove();\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n onChange: function () {\n $body.on('change', 'input.validate-on-change, select.validate-on-change', function (e) {\n const $this = $(e.target);\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n handleDateChange: function () {\n $body.on('changeDate', '[data-provide=datepicker]', function () {\n $(this).trigger('change');\n $(this).trigger('focusout');\n });\n },\n\n scrollOnError: function () {\n $body.on('validation:afterReattachInvalid', function (e, data) {\n if (formCleared) {\n formCleared = false;\n scrollToError(data.$form);\n }\n });\n },\n\n updatePostalCodePattern: function () {\n $body.on('change', '[data-update-postal-code-pattern]', function () {\n const $this = $(this);\n const postalCodeElementID = $this.data('update-postal-code-pattern');\n const $postalCode = $this.closest('form').find('#' + postalCodeElementID);\n\n if ($postalCode.length > 0) {\n const postalCodeRegexp = {\n defaults: /^[0-9]{5}$/,\n at: /^(?!0)([0-9]{4})$/,\n be: /^(?!0)([0-9]{4})$/,\n bg: /^(?!0)([0-9]{4})$/,\n dk: /^(?!0)([0-9]{4})$/,\n gr: /^([0-9]{3}\\s[0-9]{2}|[0-9]{5})$/,\n hu: /^[0-9]{4}$/,\n lv: /^([Ll][Vv])[-]([0-9]){4}$/,\n lt: /^([Ll][Tt])[-]([0-9]){5}$/,\n lu: /^(?!0)([0-9]{4})$/,\n nl: /^[1-9][0-9]{3}\\s[A-Z]{2}$/,\n no: /^[0-9]{4}$/,\n pl: /^[0-9]{2}[-][0-9]{3}$/,\n pt: /^(?!0)([0-9]{4}-?[0-9]{3})$/,\n ro: /^[0-9]{6}$/,\n ru: /^[0-9]{6}$/,\n sk: /^(?=0|8|9)([0-9]{3}\\s?[0-9]{2})$/,\n si: /^(?!0)([0-9]{4}$)/,\n es: /^((0[1-9]|5[0-2])|[1-4][0-9])[0-9]{3}$/,\n se: /^([0-9]{3}\\s[0-9]{2}|[0-9]{5})$/,\n ch: /^[0-9]{4}$/,\n gb: /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})$/,\n us: /^\\d{5}(-\\d{4})?$/,\n ca: /^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz]{1} *\\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz]{1}\\d{1}$/,\n cz: /^[0-9]{3}\\s[0-9]{2}$/,\n };\n const countryCode = ($this.val() || '').toLowerCase();\n const regexp = countryCode in postalCodeRegexp ? postalCodeRegexp[countryCode] : postalCodeRegexp.defaults;\n\n $postalCode.attr('pattern', regexp.toString().slice(1, -1));\n }\n });\n\n $('[data-update-postal-code-pattern]').trigger('change');\n },\n\n reCaptchaOnChange: function () {\n $body.on('focusin', '.g-recaptcha iframe', function () {\n validateReCaptcha($(event.target).parents('form'));\n });\n },\n\n functions: {\n validateForm: function (form, event) {\n return validateForm.call(form, event || null);\n },\n clearFormErrors: clearFormErrors,\n reAttachNoBubbleEvents: attachNoBubbleEvents,\n scrollToError: scrollToError,\n },\n};\n","$(document).ready(() => {\n let wrapper = document.querySelector('.account-section-wrapper');\n if (wrapper && wrapper.dataset.section) {\n const elementId = wrapper.dataset.section;\n if (document.getElementById(elementId)) {\n document.getElementById(elementId).parentElement.classList.add('active');\n }\n }\n});\n\n$('.layer-logged > button').on('click', () => {\n document.getElementById('main-overlay').style.display = 'block';\n});\n\n$('.toggle-order-accordion').on('click', (e) => {\n const parentClass = e.target.parentElement.classList[3];\n const orderAccordion = document.querySelector('.order-accordion-content.' + parentClass);\n const icon = e.target;\n if (orderAccordion.classList.contains('is-open')) {\n orderAccordion.classList.remove('is-open');\n icon.classList.remove('active');\n } else {\n orderAccordion.classList.add('is-open');\n icon.classList.add('active');\n }\n});\n","'use strict';\n\n$(document).ready(function () {\n setClass('maintenance-container', 'maintenance-page');\n setClass('error-page-404', 'error-404');\n});\n\n/**\n * Function used to set layout page class in order to distinguish where we are\n * @param classToCheck is the class to search inside layout page\n * @param classToSet is the class to apply to layout page\n */\nconst setClass = (classToCheck, classToSet) => {\n document.querySelector('.main--layout-page >.' + classToCheck) ? document.querySelector('.main--layout-page').classList.add(classToSet) : null;\n};\n","const headerSearchComponent = document.getElementById('header-serach-component');\n\nlet scrollDistance = 0;\nlet closeSize = 0;\nvar root = document.documentElement;\n$('.js-main-search').on('click', () => {\n if (closeSize == 0) {\n closeSize = $('.header-search .search-input .icon--close-mini-icon')[0].clientWidth;\n root.style.setProperty('--searchClose-width', closeSize + 16 + \"px\");\n }\n let headerHeight = $('header')[0].clientHeight.toString() + 'px';\n document.documentElement.style.setProperty('--header-height', headerHeight);\n headerSearchComponent.style.display = 'block';\n $('.wrapper-nav').addClass('menu-blocked');\n if (!window.isMobile()) {\n document.querySelectorAll('.blur-body-overlay')[0].classList.add('active');\n }\n $('.header-search').addClass('is-open');\n $('.header-search').removeClass('is-closed');\n $('body').trigger('search:open');\n scrollDistance = window.pageYOffset;\n $('body')[0].setAttribute(\"style\", \"overflow-y: hidden;position:fixed;top: -\"+ scrollDistance +\"px;\")\n const minicart = document.querySelector('.layer-minicart');\n minicart.dataset.lastoffset = scrollDistance;\n if ($('.header-search .einstein-carousel').length == 0) {\n $('.header-search').addClass('no-recommender-available');\n }\n\n !window.isMobile() ? $('input.search-field').trigger('focus') : '';\n var height = $('.suggestions-wrapper')[0].clientHeight;\n var total = height + 70;\n document.documentElement.style.setProperty('--min-rec-height', total.toString() + 'px');\n window.dispatchEvent(new Event('resize'));\n $('.suggestions-wrapper').addClass('animation');\n});\n\n$('#search-bar-close').on('click', () => {\n $('.suggestions-wrapper').addClass('animation');\n $('.wrapper-nav').removeClass('menu-blocked');\n if (window.isMobile()) {\n $('header').removeClass('header-unpin');\n }\n $('.header-search').removeClass('is-open');\n $('.header-search').addClass('is-closed');\n\n // $('body')[0].style.overflow = 'visible';\n $('body')[0].style['overflow-y'] = 'visible';\n $('body')[0].style['position'] = 'unset';\n $('body')[0].style['top'] = '0';\n const minicart = document.querySelector('.layer-minicart').dataset.lastoffset;\n\n // // Set the window's scroll position back to what it was before the modal was opened\n window.scrollTo(0, scrollDistance);\n setTimeout(function() {\n if (!window.isMobile()) {\n document.querySelectorAll('.blur-body-overlay')[0].classList.remove('active');\n }\n $('.header-search').removeClass('is-closed');\n $('.suggestions-wrapper').removeClass('animation');\n }, 500);\n\n // setTimeout(function() {\n // headerSearchComponent.style.display = 'none';\n // }, 1000);\n $('.js-main-search').trigger('focus');\n});\n\n\n$('.header-search .form-control.search-field').on('click', () => {\n if (window.isMobile() && !$('.header-search').hasClass('is-open')) {\n $('.suggestions-wrapper').addClass('animation');\n if (closeSize == 0) {\n closeSize = $('.header-search .search-input .icon--close-mini-icon')[0].clientWidth;\n root.style.setProperty('--searchClose-width', closeSize + 16 + \"px\");\n }\n let headerHeight = $('header')[0].clientHeight.toString() + 'px';\n document.documentElement.style.setProperty('--header-height', headerHeight);\n headerSearchComponent.style.display = 'block';\n $('.wrapper-nav').addClass('menu-blocked');\n if (!window.isMobile()) {\n document.querySelectorAll('.blur-body-overlay')[0].classList.add('active');\n }\n !window.isMobile() ? $('input.search-field').trigger('focus') : '';\n if (window.isMobile()) {\n $('header').addClass('header-unpin');\n }\n $('.header-search').addClass('is-open');\n $('.header-search').removeClass('is-closed');\n $('body').trigger('search:open');\n scrollDistance = window.pageYOffset;\n $('body')[0].setAttribute(\"style\", \"overflow-y: hidden;position:fixed;top: -\"+ scrollDistance +\"px;\")\n const minicart = document.querySelector('.layer-minicart');\n minicart.dataset.lastoffset = scrollDistance;\n if ($('.header-search .einstein-carousel').length == 0) {\n $('.header-search').addClass('no-recommender-available');\n }\n var height = $('.suggestions-wrapper')[0].clientHeight;\n var total = height + 70;\n document.documentElement.style.setProperty('--min-rec-height', total.toString() + 'px');\n window.dispatchEvent(new Event('resize'));\n }\n});","const showOrHide = (el, op) => {\n let scrollDistance = 0;\n const isMarni = document.body.dataset.sitebrand === 'Marni';\n if(op === 'show') {\n if (isMarni) {\n $('body')[0].style['overflow-y'] = 'hidden';\n $('body')[0].style['position'] = 'fixed';\n $('body')[0].style['width'] = '100%';\n // Get the scroll distance at the time the modal was opened\n scrollDistance = window.pageYOffset;\n $('body')[0].style['top'] = '-' + scrollDistance;\n const minicart = document.querySelector('.layer-minicart');\n minicart.dataset.lastoffset = scrollDistance;\n }\n document.querySelector(el).classList.add('is-open');\n setTimeout(() => {\n document.querySelector(el).classList.remove('animate-minicart-closure');\n }, 2000);\n } else {\n \n if (isMarni) {\n $('body')[0].style['overflow-y'] = 'visible';\n $('body')[0].style['position'] = 'unset';\n $('body')[0].style['top'] = '0';\n const minicart = document.querySelector('.layer-minicart').dataset.lastoffset;\n \n // // Set the window's scroll position back to what it was before the modal was opened\n window.scrollTo(0, minicart);\n // $(window).unbind('scroll');\n var height = -$('#minicart-layer-dropdown')[0].clientHeight - 200;\n // var padding = $('.minicart-modal .modal-footer')[0].clientHeight + 15;\n var root = document.documentElement;\n // root.style.setProperty('--slide-close', height + \"px\");\n }\n document.querySelector(el).classList.add('animate-minicart-closure');\n document.querySelector(el).classList.remove('is-open');\n setTimeout(() => {\n document.querySelector(el).classList.remove('animate-minicart-closure');\n }, 2000);\n }\n}\n\n$('.icon--bag-red').on('click', () => {\n const mainOverlay = document.getElementById('main-overlay');\n if(document.querySelector('body header.header')){\n document.querySelector('body header.header').classList.remove('z-index-0');\n }\n document.querySelector('.dropdown.layer-minicart.is-open') ? showOrHide('.layer-minicart #layer-minicart', 'hide') : showOrHide('.layer-minicart #layer-minicart', 'show');\n if(mainOverlay && window.innerWidth >= 992) {\n mainOverlay.style.display === '' || mainOverlay.style.display === 'none' ? mainOverlay.style.display = 'block' : mainOverlay.style.display === 'none';\n }\n});\n\n\n$(document).on('click', (e) => {\n if(e.target.classList.contains('minicart-close') || e.target.classList.contains('minicart-overlay') || e.target.classList.contains('minicart-notification-overlay')) {\n if (e.target.classList.contains('minicart-nofitication-close') || e.target.classList.contains('minicart-notification-overlay')) {\n showOrHide('.layer-notification-minicart', 'hide');\n } else {\n showOrHide('.layer-minicart', 'hide');\n }\n }\n\n if(e.target.classList.contains('filter-overlay') || e.target.classList.contains('layer-filter-close')) {\n showOrHide('.layer-filter', 'hide');\n\n setTimeout(() => {\n document.querySelector('body').classList.remove('no-zindex', 'layer-filter-open');\n }, 1000);\n }\n});\n\n\n$(document).on('click', (e) => {\n e.target.classList.contains('minicart-close') ? $('.icon--bag-red').trigger('click') : null;\n if(window.innerWidth >= 992 ) {\n const boipisItem = document.querySelector('.store-search-result .store-item');\n // update header z-index when user clicks on bopis trigger and close modal icon\n // e.target.classList.contains('product-page') ? document.querySelector('body header.header').classList.add('z-index-0') : null;\n // e.target.classList.contains('modal-close') ? document.querySelector('body header.header').classList.remove('z-index-0') : null;\n if(boipisItem && boipisItem.contains(e.target) && e.target.classList.contains('add-to-cart-actions')) {\n document.querySelector('.minicart-action').addEventListener('click', () => document.querySelector('body header.header').classList.remove('z-index-0'));\n }\n }\n});\n\n$(document).on('click', '.add-to-cart-recommendation', function () {\n $('body').trigger('product:beforeAddToCart', this);\n $.spinner().start();\n const addToCartUrl = $(this).attr('data-url');\n const productId = $(this).attr('data-pid');\n const updateMiniCartUrl = $(this).attr('data-minicart');\n\n if (addToCartUrl && productId) {\n const form = {\n pid: productId,\n quantity: 1,\n };\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (responseData) {\n if (!responseData.error) {\n $('body').trigger('product:afterAddToCart', responseData);\n updateMiniCart(updateMiniCartUrl);\n $('.js-quantity.quantity.counter').text(responseData.quantityTotal);\n } else {\n $('.add-to-cart-eror').text(responseData.message);\n }\n document.getElementById('main-overlay').style.display = 'none';\n $.spinner().stop();\n },\n error: function () {\n document.getElementById('main-overlay').style.display = 'none';\n $.spinner().stop();\n },\n });\n }\n});\n\n/**\n * Function to update minicart content\n * @param updateMiniCartUrl endpoint for minicart content\n */\n const updateMiniCart = (updateMiniCartUrl) => {\n $.spinner().start();\n $.ajax({\n url: updateMiniCartUrl,\n method: 'GET',\n success: function (responseData) {\n if (responseData && !responseData.error) {\n $('.js-dropdown-container.minicart-modal').html(responseData);\n } else {\n $('.minicart-action').trigger('click');\n }\n let eventName = 'layer-minicart:openRemote';\n $('body').trigger(eventName);\n $('#minicart-quantity-number')[0].innerText = $('.items-in-cart')[0].innerText;\n\n\n\n if (window.isMobile()){\n var root = document.documentElement;\n let modalHeader = 22;\n let modalFooter = $('.minicart-modal .modal-footer')[0].clientHeight;\n let totalHeight = modalHeader + 32 + modalFooter;\n\n let windowHeight = window.innerHeight;\n let heightContent = 'calc(100svh - ' + totalHeight + 'px)';\n if ($('.minicart-modal .product-content').length > 0) {\n $('.minicart-modal .product-content')[0].setAttribute(\"style\", \"max-height: \" + heightContent + \"\");\n }\n let a = $('#layer-minicart')[0].clientHeight;\n $('.layer-minicart .dropdown-content')[0].style.transition = 'none';\n root.style.setProperty('--slide-open-mobile', 'calc(100svh - ' + a + 'px)');\n setTimeout(() => {\n $('.layer-minicart .dropdown-content')[0].style.transition = '';\n }, 50);\n\n\n\n }\n },\n error: function () {\n $('.minicart-action').trigger('click');\n $.spinner().stop();\n },\n });\n};\n\n\nfunction loadScript(url) {\n document.querySelectorAll('#minicart-layer-dropdown .paypal-cart-button').forEach((button) => button.innerHTML = '');\n let script = document.createElement('script');\n script.src = url;\n document.body.appendChild(script);\n}\n\n$(document).on('layer-minicart:openRemote', function (e) {\n if(document.getElementsByClassName('minicart-paypal-button-container').length > 0) {\n if(document.getElementById('cart-paypal-button-container')) {\n let prepandPaypalminicart = document.querySelector('#cart-paypal-button-container').dataset.prepandpaypalminicart;\n\n $.ajax({\n url: prepandPaypalminicart,\n method: 'GET',\n success: function (responseData) {\n if (responseData && !responseData.error) {\n let scriptUrl = document.querySelector('#cart-paypal-button-container').dataset.scripturl;\n if ($('script[src=\"'+scriptUrl+'\"]').length > 0) {\n $('script[src=\"'+scriptUrl+'\"]').remove();\n } \n loadScript(scriptUrl);\n }\n }\n });\n \n }\n }\n});\n\n$(document).on('layer-minicart:updateminiCart', function (e) {\n const updateMiniCartUrl = $('#minicart-layer-dropdown')[0].dataset.remoteContent;\n updateMiniCart(updateMiniCartUrl);\n});\n\n$(document).on('click', '.minicart-notification-container .minicart-continue-shopping-link', function (e) {\n $('.minicart-notification-container .minicart-nofitication-close').click();\n});\n\n\n\n$(document).on('DOMNodeInserted', function(e) { \n if($(e.target).hasClass('paypal-checkout-sandbox')){\n if(document.activeElement.parentElement.parentElement.classList.contains('paypal-cart-button-minicart')){\n fastCheckout('paypal', 'minicart');\n }\n }\n});\n\n\n$('body').on('click', '.apple-pay-minicart-button', function() {\n fastCheckout('applepay', 'minicart');\n});\n\n\nfunction fastCheckout(cartType, buttonPosition) {\n var fastCheckoutUrl = $(\".track-fast-checkout-url\").val();\n var fastCheckoutData = cartType + '_fast_' + buttonPosition;\n\n if(fastCheckoutUrl) {\n $.ajax({\n url: fastCheckoutUrl,\n method: 'GET',\n dataType: 'json',\n data: { fastPayment: fastCheckoutData},\n success: function (data) {\n $('body').trigger('checkout:fastCheckoutStart', [cartType, buttonPosition]);\n }\n });\n }\n}","'use strict';\n\nconst processInclude = require('base/util');\n\n$(document).ready(function () {\n processInclude(require('./registration/registration'));\n processInclude(require('core/datepicker'));\n processInclude(require('tealium/tealiumEvents'));\n});\nrequire('core/components/spinner');\n","'use strict';\n\nconst $body = $('body');\nconst formValidation = require('core/components/formValidation');\nconst clientSideValidation = require('core/components/clientSideValidation');\n\nconst $registrationForm = $('form.registration');\n\nmodule.exports = {\n init: function () {\n this.initAgeValidation();\n // clientSideValidation.init();\n $registrationForm.on('bouncerFormValid', function (e) {\n e.preventDefault();\n\n $.spinner().start();\n clientSideValidation.functions.clearFormErrors($registrationForm);\n\n $.post({\n url: $registrationForm.attr('action'),\n dataType: 'json',\n data: $registrationForm.serialize(),\n success: function (data) {\n if (!data.success) {\n formValidation($registrationForm, data);\n $.spinner().stop();\n clientSideValidation.functions.scrollToError($registrationForm);\n } else {\n $body.trigger('user:registered');\n $body.trigger('customer:updateAttributes');\n window.location = data.redirectUrl;\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n }\n\n $.spinner().stop();\n },\n });\n\n return false;\n });\n\n /**\n * toggle confirmation content\n */\n $('.js_toggle-order-details').on('click', function () {\n $('.js_confirmation-content').slideToggle();\n $(this).toggleClass('active');\n });\n },\n initAgeValidation: function() {\n const $birthdateInput = $('#registration-form-birthday');\n const today = new Date();\n const maxDate = new Date(\n today.getFullYear() - 18,\n today.getMonth(),\n today.getDate()\n );\n\n $birthdateInput.attr('max', maxDate.toISOString().split('T')[0]);\n },\n\n handlePopups: function () {\n $('#privacyPopupModal').on('shown.bs.modal', function (event) {\n const $aTag = $(event.relatedTarget); // Element that triggered the modal\n const $relevantSelector = $($aTag.data('hash'));\n\n if ($relevantSelector.length) {\n $relevantSelector.get(0).scrollIntoView();\n }\n });\n },\n datePickerKeyboardNav: function () {\n $('#registration-form-birthday').on('keydown', function (event) {\n if (event.key !== 'Enter' || this !== document.activeElement) return; // Only do something if element has focus and Enter is pressed.\n\n const $datepicker = $('.datepicker');\n if (!$datepicker.length) return; // date picker not open\n\n // get current user selection\n const $selection = $datepicker\n .children()\n .filter(function () {\n return $(this).css('display') !== 'none';\n })\n .find('.focused');\n // click on user selection\n $selection.trigger('click');\n\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n },\n passwordDinamicValidation: function() {\n $('#registration-form-password').on('keydown input', function(e) {\n var emailInput = e.target.value;\n if(emailInput.length >= 8) {\n $('.error-length').addClass('green');\n } else {\n $('.error-length').removeClass('green');\n } \n if(/\\d/.test(emailInput)) {\n $('.error-number').addClass('green');\n } else {\n $('.error-number').removeClass('green');\n }\n if( /[!+,\\-./:;<=>?@]/.test(emailInput)) {\n $('.error-character').addClass('green');\n } else {\n $('.error-character').removeClass('green');\n }\n });\n }\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '<li><div>' + message + '</div></li>';\n });\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '<div class=\"attribute-values\">' + attribute.label + ': '\n + attribute.value + '</div>';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\"></div><a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"prev\"><span class=\"fa icon-prev\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></a><a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"next\"><span class=\"fa icon-next\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('next') + '</span></a>');\n for (var i = 0; i < imgs.length; i++) {\n $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + ' image number ' + parseInt(imgs[i].index, 10) + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n }\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '<option value=\"' + quantity.value + '\" data-url=\"' + quantity.url + '\"' +\n selected + '>' + quantity.value + '</option>';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('<div>').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = '<!-- Modal -->'\n + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n + '<span class=\"enter-message sr-only\" ></span>'\n + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n + 'data-UUID=\"' + data.uuid + '\"'\n + 'data-pliUUID=\"' + data.pliUUID + '\"'\n + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n + 'data-pageStart=\"0\"'\n + 'data-pageSize=\"' + data.pageSize + '\"'\n + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n + '<!-- Modal content-->'\n + '<div class=\"modal-content\">'\n + '<div class=\"modal-header\">'\n + ' <span class=\"\">' + data.labels.selectprods + '</span>'\n + ' <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n + ' <span aria-hidden=\"true\">×</span>'\n + ' <span class=\"sr-only\"> </span>'\n + ' </button>'\n + '</div>'\n + '<div class=\"modal-body\"></div>'\n + '<div class=\"modal-footer\"></div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '<div class=\"add-to-cart-messages\"></div>'\n );\n }\n\n $('.add-to-cart-messages').append(\n '<div class=\"alert ' + messageType + ' add-to-basket-alert text-center\" role=\"alert\">'\n + response.message\n + '</div>'\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '<div class=\"selected-pid row\" '\n + 'data-pid=\"' + pid + '\"'\n + 'data-qty=\"' + submittedQty + '\"'\n + 'data-optionID=\"' + (optionID || '') + '\"'\n + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n + '>'\n + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n + $choiceOfBonusProduct.find('.product-name').html()\n + '</div>'\n + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n + '</div>'\n ;\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $('.add-to-cart-messages').append(\n '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.errorMessage + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.msgSuccess + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","const isMargiela = document.querySelector('body').classList.contains('Margiela');\n/**\n * Validates the attributes\n * @param {jQuery} $productContainer - DOM container for a given product\n * @returns {boolean} - [true] when valid, [false] when invalid\n */\nfunction validation($productContainer, trigger) {\n var $attributes;\n let invalidAttributesSelect = [];\n var isNewPDP = false;\n var isPrivateSales = $('.private-sales').data('isPrivateSalesProduct');\n var isLogged = $('.private-sales').data('isloggedin');\n\n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n if (isNewPDP & isPrivateSales && !isLogged) {\n return true;\n }\n\n if (!isNewPDP) {\n $attributes = $productContainer.find('.variation-attribute select[class*=\"select-\"]');\n $attributes.each(function (a) {\n let optionSelected = $(this).find('option:selected');\n if (!optionSelected || !optionSelected.data('attrValue') || optionSelected.prop('disabled')) {\n invalidAttributesSelect.push($(this).parent());\n }\n });\n } else {\n $attributes = $productContainer.find('.variation-attribute');\n $attributes.each(function (a) {\n let availableAttributes = $(this).find('.attribute-selector-new');\n availableAttributes.each(function (a) {\n if (!availableAttributes.hasClass('selected')) {\n invalidAttributesSelect.push($(this));\n }\n });\n });\n }\n\n if (invalidAttributesSelect.length > 0) {\n invalidAttributesSelect.forEach(function (a) {\n\n if(isMargiela){\n a.find('select').focus();\n } else if (!isNewPDP){\n a.addClass('invalid');\n }\n\n \n });\n\n if (isNewPDP && $('.layer-product-notify.is-open').length < 1 && $('.layer-product-coming-soon.is-open').length < 1) {\n $('.variation-size-action').click();\n }\n\n return false;\n }\n\n $attributes.removeClass('invalid');\n return true;\n}\n\nmodule.exports = validation;\n","'use strict';\n\nlet formValidation = require('../components/formValidation');\nlet createErrorNotification = require('../components/errorNotification');\n/* This var is used as workaround to prevent multiple submit in login page */\nlet divId = 'loginSubmitInProgress';\n\nconst isMargiela = document.body.dataset.sitebrand === \"Margiela\";\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\n\nmodule.exports = {\n login: function () {\n // console.log('login');\n $('form.login').on('bouncerFormValid', function (e) {\n // console.log('login bouncerFormValid');\n e.preventDefault();\n\n let myEle = document.getElementById(divId);\n if (myEle) {\n return false;\n }\n\n /* workaround to prevent multiple submit in login page */\n let div = document.createElement('div');\n div.id = divId;\n document.body.appendChild(div);\n\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.login').trigger('login:submit', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n // console.log('login bouncerFormValid success', data);\n $.spinner().stop();\n document.getElementById(divId).remove();\n if (!data.success && data.journeyMsg) {\n if(document.querySelectorAll('.journey-start.js_journey-start').length < 1) {\n\n if(isJilSander){\n $(data.journeyMsg).insertAfter('.js-login-box');\n } else{\n $(data.journeyMsg).insertAfter('.login-content .alert-danger');\n }\n }\n $('form.login').trigger('login:error', data);\n } else if (!data.success) {\n formValidation(form, data);\n $.spinner().stop();\n } else {\n $('form.login').trigger('login:success', data);\n\n //Tealium event \"When the user correctly login\"\n $('body').trigger('user:loggedIn');\n location.href = data.redirectUrl;\n }\n },\n error: function (data) {\n document.getElementById(divId).remove();\n if (data.responseJSON.redirectUrl) {\n window.location.href = data.responseJSON.redirectUrl;\n } else {\n $('form.login').trigger('login:error', data);\n $.spinner().stop();\n }\n },\n });\n return false;\n });\n },\n\n guestlogin: function () {\n $('form.guest-login').on('bouncerFormValid', function (e) {\n e.preventDefault();\n\n let myEle = document.getElementById(divId);\n if (myEle) {\n return false;\n }\n\n /* workaround to prevent multiple submit in login page */\n let div = document.createElement('div');\n div.id = divId;\n document.body.appendChild(div);\n\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.guest-login').trigger('login:submit', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n document.getElementById(divId).remove();\n if (!data.status) {\n formValidation(form, data);\n //$('form.guest-login').trigger('login:error', data);\n } else {\n //$('form.guest-login').trigger('login:success', data);\n location.href = data.redirectUrl;\n }\n },\n error: function (data) {\n document.getElementById(divId).remove();\n if (data.responseJSON.redirectUrl) {\n window.location.href = data.responseJSON.redirectUrl;\n } else {\n $('form.guest-login').trigger('login:error', data);\n $.spinner().stop();\n }\n },\n });\n return false;\n });\n },\n\n register: function () {\n // console.log('register');\n $('form.registration').on('bouncerFormValid', function (e) {\n // console.log('register bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.registration').trigger('login:register', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n if (!data.success) {\n $('form.registration').trigger('login:register:error', data);\n formValidation(form, data);\n } else {\n $('form.registration').trigger('login:register:success', data);\n location.href = data.redirectUrl;\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification($('.error-messaging'), err.responseJSON.errorMessage);\n }\n\n $.spinner().stop();\n },\n });\n return false;\n });\n },\n\n resetPassword: function () {\n // console.log('resetPassword');\n $('.reset-password-form').on('bouncerFormValid', function (e) {\n console.log('reset-password-form bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n $.spinner().start();\n $('.reset-password-form').trigger('login:register', e);\n\n var resetPasswordAjax = function (form) {\n let url = form.attr('action');\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n if (!data.success) {\n formValidation(form, data);\n } else {\n if (isMargiela) {\n $('#forgot-password #modal-forgot-password').addClass('d-none');\n $('#forgot-password #modal-forgot-password-confirm').removeClass('d-none');\n // MARG-791\n if (form.closest('.modal.is-open').length === 0) {\n $('#forgot-password').closest('[data-component=\"ModalTriggerComponent\"]').trigger('click');\n }\n } else if(isJilSander){\n $('.js-reset-password-wrapper').addClass('d-none');\n $('.js-recover-password-confirm').removeClass('d-none');\n } else{\n document.getElementById('modal-forgot-password').style.display = 'none';\n document.getElementById('modal-forgot-password-confirm').style.display = 'block';\n }\n\n // $('.request-password-title').text(data.receivedMsgHeading);\n // $('.request-password-body')\n // .empty()\n // .append('<p>' + data.receivedMsgBody + '</p>');\n\n // if (!data.mobile) {\n // $('#submitEmailButton').text(data.buttonText).attr('data-dismiss', 'modal');\n // }\n // else {\n // $('.send-email-btn')\n // .empty()\n // .html('<a href=\"' + data.returnUrl + '\" class=\"btn btn-primary btn-block\">' + data.buttonText + '</a>');\n // }\n }\n },\n error: function () {\n $.spinner().stop();\n },\n });\n };\n\n if ($('.g-recaptcha').length > 0) {\n grecaptcha.ready(function() {\n grecaptcha.execute($('[id^=\"gReCaptchaResetPassword\"]').data('sitekey'), {action:'submit'}).then(function(token) {\n $('[id^=\"gReCaptchaResetPassword\"]').val(token);\n resetPasswordAjax(form);\n });\n });\n } else {\n resetPasswordAjax(form);\n }\n return false;\n });\n },\n\n clearResetForm: function () {\n $('#login .modal').on('hidden.bs.modal', function () {\n $('#reset-password-email').val('');\n $('.modal-dialog .form-control.is-invalid').removeClass('is-invalid');\n });\n },\n\n changePassword: function () {\n // console.log('changePassword');\n $('.change-password-form').on('bouncerFormValid', function (e) {\n // console.log('change-password-form bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n // $('.reset-password-form').trigger('login:register', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n // console.log('change-password-form bouncerFormValid success', data);\n $.spinner().stop();\n if (!data.success) {\n formValidation(form, data);\n } else {\n if (isMargiela) {\n document.getElementById('modal-new-password').classList.add('d-none');\n document.getElementById('modal-new-password-confirm').classList.remove('d-none');\n } else if(isJilSander){\n window.location.href = data.redirectUrl;\n // document.querySelector('.js-reset-password-form').classList.add('d-none');\n // document.querySelector('.js-reset-password-confirm').classList.remove('d-none');\n } else {\n document.getElementById('modal-new-password').style.display = 'none';\n document.getElementById('modal-new-password-confirm').style.display = 'block';\n }\n }\n },\n error: function () {\n $.spinner().stop();\n },\n });\n return false;\n });\n },\n};\n","const isMargiela = document.querySelector('body').classList.contains('Margiela');\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\nconst isMarni = document.body.dataset.sitebrand === \"Marni\";\n\nlet bodyMeasurementSwitchButtons;\nlet productMeasurementSwitchButtons;\n\nfunction columnAndRowHighlight () {\n const tds = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table tbody tr td');\n // const trs = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table tbody tr');\n const ths = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table thead tr th');\n [...tds, ...ths].forEach((td, i) => {\n td.addEventListener('mouseover', (e) => {\n const currentRow = e.target.closest('tr');\n currentRow.classList.add('hightlighet-table-element');\n const currentRowHeight = currentRow.offsetHeight;\n currentRow.style.height = currentRowHeight + 'px';\n const newIndex = [...e.target.parentElement.children].indexOf(e.target);\n const trsToBeHighLighted = e.target.closest('table').querySelectorAll(`tr > :nth-child(${newIndex + 1})`);\n trsToBeHighLighted.forEach(el => el.classList.add('hightlighet-table-element'));\n const tbodyHighLightedCells = document.querySelectorAll('.modal-content-gudielines tr .hightlighet-table-element');\n addRemoveTbodyLightedCellClass(tbodyHighLightedCells, 'add');\n });\n td.addEventListener('mouseleave', (e) => {\n const currentRow = e.target.closest('tr');\n currentRow.classList.remove('hightlighet-table-element');\n const newIndex = [...e.target.parentElement.children].indexOf(e.target);\n const trsToBeHighLighted = e.target.closest('table').querySelectorAll(`tr > :nth-child(${newIndex + 1})`);\n trsToBeHighLighted.forEach(el => el.classList.remove('hightlighet-table-element'));\n const tbodyHighLightedCells = document.querySelectorAll('.modal-content-gudielines tr .hightlighet-table-element');\n addRemoveTbodyLightedCellClass(tbodyHighLightedCells, 'remove');\n });\n });\n}\n\n\n// get first and last elements from tbody\nfunction addRemoveTbodyLightedCellClass(tbodyHighLightedCells, act) {\n tbodyHighLightedCells.forEach((cell, index) => {\n if(act === 'remove') {\n document.querySelectorAll('.first-highlighted') && document.querySelectorAll('.first-highlighted').forEach(el => {\n el.classList.remove('first-highlighted');\n });\n document.querySelectorAll('.last-highlighted') && document.querySelectorAll('.last-highlighted').forEach(el => {\n el.classList.remove('last-highlighted');\n });\n } else {\n if(index === 0){\n cell.classList.add('first-highlighted');\n } else if(index === tbodyHighLightedCells.length -1) {\n cell.classList.add('last-highlighted');\n }\n }\n });\n}\n\nfunction hideShowUnits(unit) {\n const modal = document.querySelector('#size-guidelines-modal');\n const displayValues = [...modal.querySelectorAll('.js-value')];\n displayValues.forEach((item) => {\n if (item.classList.contains(`js-${unit}`)) {\n item.classList.remove('d-none');\n } else {\n item.classList.add('d-none');\n }\n });\n}\n\nfunction sizeUnitToggler() {\n const modal = document.querySelector('#size-guidelines-modal');\n if (modal) {\n const muTogglers = [...modal.querySelectorAll('input[name=\"measuringguide_mu\"]')];\n muTogglers.forEach((item) => {\n let unit = item.checked ? 'in' : 'cm';\n hideShowUnits(unit);\n item.addEventListener('change', (e) => {\n unit = e.currentTarget.checked ? 'in' : 'cm';\n hideShowUnits(unit);\n muTogglers.forEach((toggler) => {\n toggler.checked = e.currentTarget.checked;\n });\n });\n });\n }\n}\n\ndocument.querySelectorAll('.fitguide__tab-button').forEach((item) => {\n item.addEventListener('click', (event) => {\n if (item.dataset.ref === 'fitguide-content-01') {\n document.getElementById('fitguide-content-01').style.display = 'block';\n document.getElementById('fitguide-content-02').style.display = 'none';\n }\n if (item.dataset.ref === 'fitguide-content-02') {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n }\n });\n});\n\nif (document.querySelector('.click-to-convert-sizes-text')) {\n document.querySelector('.click-to-convert-sizes-text').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\n\nif (document.querySelector('.container-size-guidelines .modal-header .back-button')) {\n document.querySelector('.container-size-guidelines .modal-header .back-button').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'none';\n document.getElementById('fitguide-measurement-button').classList.add('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.remove('fitguide__tab-button--active');\n });\n}\n\nif (document.querySelector('.container-size-guidelines .switch-to-table')) {\n document.querySelector('.container-size-guidelines .switch-to-table').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'block';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\nif (document.querySelector('.click-to-convert-sizes-text')) {\n document.querySelector('.click-to-convert-sizes-text').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\ndocument.querySelectorAll('.fitguide__tab-button').forEach((item) => {\n const container = document.querySelector('#size-guidelines-modal .modal-content');\n if (container) {\n let tabs = [...container.querySelectorAll('.fitguide__tab-button')];\n tabs.forEach((items) => {\n items.addEventListener('click', (event) => {\n const thisItem = event.currentTarget;\n if (!thisItem.classList.contains('fitguide__tab-button--active')) {\n [...container.querySelectorAll('.fitguide__tab-button--active')].forEach((item) => {\n item.classList.remove('fitguide__tab-button--active');\n });\n [...container.querySelectorAll('.fitguide__content')].forEach((item) => {\n item.classList.remove('fitguide__content--active');\n });\n thisItem.classList.add('fitguide__tab-button--active');\n if(!isMargiela) {\n container.querySelector(`#${thisItem.dataset.ref}`) && container.querySelector(`#${thisItem.dataset.ref}`).classList.add('fitguide__content--active');\n }\n [...container.querySelectorAll(`[data-ref=\"${thisItem.dataset.ref}\"]`)].forEach((item) => {\n item.classList.add('fitguide__tab-button--active');\n });\n }\n });\n });\n const sizeSelectors = [...container.querySelectorAll('.measuring-guide__size-selector select')];\n sizeSelectors.forEach((item) => {\n item.addEventListener('change', (e) => {\n const [type, size] = e.currentTarget.value.split('_');\n let lengthValue = size;\n if (type === 'size') {\n container.querySelector(`.measuring-guide__interactive-table[data-measure=\"${type}\"]:not(.d-none)`).classList.add('d-none');\n container.querySelector(`[data-measure=\"${type}\"][data-size=\"${size}\"]`).classList.remove('d-none');\n const lenghtSelect = container.querySelector('.measuring-guide__size-selector select[name=\"length\"]');\n if (lenghtSelect) {\n lengthValue = lenghtSelect.value.split('_')[1];\n }\n }\n [...container.querySelectorAll(`.measuring-guide__interactive-table:not(.d-none) [data-length]:not([data-length=\"${lengthValue}\"])`)].forEach((item) => {\n item.classList.add('d-none');\n });\n container.querySelector(`.measuring-guide__interactive-table:not(.d-none) [data-length=\"${lengthValue}\"]`).classList.remove('d-none');\n });\n });\n }\n});\n\nfunction enhancedMeasuringGuide() {\n sizeUnitToggler();\n const container = document.querySelector('#size-guidelines-modal .modal-content');\n if (container) {\n let tabs = [...container.querySelectorAll('.fitguide__tab-button')];\n tabs.forEach((items) => {\n items.addEventListener('click', (event) => {\n const thisItem = event.currentTarget;\n if (!thisItem.classList.contains('fitguide__tab-button--active')) {\n [...container.querySelectorAll('.fitguide__tab-button--active')].forEach((item) => {\n item.classList.remove('fitguide__tab-button--active');\n });\n [...container.querySelectorAll('.fitguide__content')].forEach((item) => {\n item.classList.remove('fitguide__content--active');\n });\n thisItem.classList.add('fitguide__tab-button--active');\n if(!isMargiela) {\n container.querySelector(`#${thisItem.dataset.ref}`) && container.querySelector(`#${thisItem.dataset.ref}`).classList.add('fitguide__content--active');\n }\n [...container.querySelectorAll(`[data-ref=\"${thisItem.dataset.ref}\"]`)].forEach((item) => {\n item.classList.add('fitguide__tab-button--active');\n });\n }\n });\n });\n const sizeSelectors = [...container.querySelectorAll('.measuring-guide__size-selector select')];\n sizeSelectors.forEach((item) => {\n item.addEventListener('change', (e) => {\n const [type, size] = e.currentTarget.value.split('_');\n let lengthValue = size;\n if (type === 'size') {\n container.querySelector(`.measuring-guide__interactive-table[data-measure=\"${type}\"]:not(.d-none)`).classList.add('d-none');\n container.querySelector(`[data-measure=\"${type}\"][data-size=\"${size}\"]`).classList.remove('d-none');\n const lenghtSelect = container.querySelector('.measuring-guide__size-selector select[name=\"length\"]');\n if (lenghtSelect) {\n lengthValue = lenghtSelect.value.split('_')[1];\n }\n }\n [...container.querySelectorAll(`.measuring-guide__interactive-table:not(.d-none) [data-length]:not([data-length=\"${lengthValue}\"])`)].forEach((item) => {\n item.classList.add('d-none');\n });\n container.querySelector(`.measuring-guide__interactive-table:not(.d-none) [data-length=\"${lengthValue}\"]`).classList.remove('d-none');\n });\n });\n }\n}\n\nfunction basicMeasuringGuide() {\n sizeUnitToggler();\n}\n\nfunction buildSingleRowContent(measure) {\n let content = '';\n if(measure && measure.values) {\n measure.values.forEach( val => {\n content += `\n <td class=\"js-values\">\n ${val.cm ? `<span class=\"js-value js-cm\">${val.cm}</span>` : null}\n ${val.in ? `<span class=\"js-value js-in d-none\">${val.in}</span>` : null}\n </td>\n `\n })\n }\n return content;\n}\n\nconst calcDynamicPercentWidth = (ref, length) => ``;\n\nfunction buildTableHeader(bodyMeasurement) {\n let headings = '';\n if(bodyMeasurement && bodyMeasurement.headings) {\n bodyMeasurement.headings.forEach((el, index) => {\n headings += `<th style=\"width: ${calcDynamicPercentWidth(100, bodyMeasurement.headings.length)}\" class=\"${index === 1 ? 'fixed-side' : ''}\">${el}</th>`;\n });\n }\n return headings;\n}\n\nfunction buildTableBody(bodyMeasurement) {\n let content = '';\n if(bodyMeasurement && bodyMeasurement.convertedMeasurements) {\n bodyMeasurement.convertedMeasurements.forEach((measure) => {\n content += `\n <tr>\n <td class=\"measure-label label fixed-side\">${measure.label}</td>\n ${buildSingleRowContent(measure)}\n </tr>\n `\n })\n }\n return content;\n}\n\nconst initUnitSizeChangeBehaviour = (unitSizeInputs) => {\n const toggleActiveButton = (input) => {\n unitSizeInputs && unitSizeInputs.forEach(b => b.classList.remove('-active'));\n input.target.closest('.jils-change-unit-measure').classList.add('-active');\n }\n unitSizeInputs ? unitSizeInputs.forEach(b => b.addEventListener('click', (e) => toggleActiveButton(e))) : null;\n}\n\n\nconst bodyMeasurementTemplate = (bodyMeasurement) => {\n const changeUnitMeasureLabel = `<div class=\"change-unit-measure-label\">${bodyMeasurement && bodyMeasurement.measurementsDescriptionLabel}</div>`;\n const changeUnitMeasureSeparator = `<div class=\"change-unit-measure-separator\">/</div>`;\n return `\n <header class=\"measuring-guide__header\">\n <div class=\"measuring-guide__header-content\">\n <p class=\"text-measurements-guide\">${bodyMeasurement.description}</p> \n </div>\n <div class=\"measuring-guide__toggler\">\n <div class=\"col\">\n <div class=\"row choose-size-radio-input-row\">\n <div class=\"col-auto measuring-guide__radio-input -jils-measuring-guide-input\">\n <div class=\"form-group mm-switch -md\" id=\"body-measurements-switch\">\n ${isJilSander ? changeUnitMeasureLabel : ''}\n <div class=\"radio mm-switch__toggle jils-change-unit-measure -active\">\n <label for=\"unit-measure_0\">cm\n <input name=\"unit-measure\" class=\"body-unit-measure unit-measure\" id=\"unit-measure_0\" type=\"radio\" value=\"cm\" checked=\"\">\n </label>\n </div>\n ${isJilSander ? changeUnitMeasureSeparator : ''}\n <div class=\"radio mm-switch__toggle jils-change-unit-measure\">\n <label for=\"unit-measure_1\">inches\n <input name=\"unit-measure\" class=\"body-unit-measure unit-measure\" id=\"unit-measure_1\" type=\"radio\" value=\"in\">\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </header>\n <div class=\"measuring-guide-content row\">\n <div class=\"col-12\">\n <div class=\"table table-wrapper\">\n <table class=\"table table-striped body-measure-table\">\n <thead>\n ${buildTableHeader(bodyMeasurement)}\n </thead>\n <tbody>\n ${buildTableBody(bodyMeasurement)}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n `\n}\n\nconst toggleButtonClick = (btn) => {\n if(btn) {\n btn.addEventListener('click', (e) => {\n e.preventDefault();\n\n let selectedUnitMeasure = e.target && e.target.classList.contains('unit-measure') ? e.target.value : e.target.querySelector('.unit-measure').value;\n let selectedFitGuideSection = e.target.closest('.form-group.mm-switch').getAttribute('id');\n const isBodyMeasurementSection = selectedFitGuideSection === 'body-measurements-switch';\n const isProductMeasurementSection = selectedFitGuideSection === 'product-measurements-switch';\n\n if(isProductMeasurementSection) {\n productMeasurementSwitchButtons.forEach(b => b.classList.remove('-active'));\n } else if(isBodyMeasurementSection) {\n bodyMeasurementSwitchButtons.forEach(b => b.classList.remove('-active'));\n }\n \n e.target.closest('.mm-switch__toggle').classList.add('-active');\n\n if(selectedUnitMeasure) {\n if(selectedUnitMeasure == 'in') {\n if(isBodyMeasurementSection) {\n document.querySelectorAll('.body-measure-table tbody .js-values .js-cm').forEach(cms => {\n cms.classList.contains('d-none') ? null : cms.classList.add('d-none');\n });\n document.querySelectorAll('.body-measure-table tbody .js-values .js-in').forEach(ins => {\n ins.classList.remove('d-none');\n });\n } else if (isProductMeasurementSection) {\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-cm').forEach(cms => {\n cms.classList.contains('d-none') ? null : cms.classList.add('d-none');\n });\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-in').forEach(ins => {\n ins.classList.remove('d-none');\n });\n }\n } else {\n if(isBodyMeasurementSection) {\n document.querySelectorAll('.body-measure-table tbody .js-values .js-in').forEach(ins => {\n ins.classList.contains('d-none') ? null : ins.classList.add('d-none');\n });\n document.querySelectorAll('.body-measure-table tbody .js-values .js-cm').forEach(cms => {\n cms.classList.remove('d-none');\n });\n } else if (isProductMeasurementSection) {\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-in').forEach(ins => {\n ins.classList.contains('d-none') ? null : ins.classList.add('d-none');\n });\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-cm').forEach(cms => {\n cms.classList.remove('d-none');\n });\n }\n }\n }\n })\n }\n\n}\n\n\nmodule.exports = {\n sizeChart: function () {\n $('#size-guidelines-modal').on('show.bs.modal', function (e) {\n const layerBody = e.currentTarget.querySelector('.modal-content');\n const triggerButton = document.querySelector('[data-target=\"#size-guidelines-modal\"]');\n layerBody.innerHTML = '';\n $.ajax({\n url: triggerButton.getAttribute('href'),\n type: 'get',\n dataType: 'json',\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n if (data.success) {\n layerBody.innerHTML = data.content;\n if (layerBody.querySelector('.fitguide__title')) {\n enhancedMeasuringGuide();\n } else {\n basicMeasuringGuide();\n }\n }\n $.spinner().stop();\n },\n error: (error) => {\n $.spinner().stop();\n layerBody.innerHTML = `<p class=\"error\">${error.responseJSON.message}</p>`;\n },\n });\n });\n $('#sizeChartModal').on('show.bs.modal', function (e) {\n const layerBody = e.currentTarget.querySelector('.modal-content');\n const triggerButton = document.querySelector('[data-target=\"#sizeChartModal\"]');\n layerBody.innerHTML = '';\n $.ajax({\n url: triggerButton.getAttribute('href'),\n type: 'get',\n dataType: 'json',\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n if (data.success) {\n layerBody.innerHTML = data.content;\n }\n $.spinner().stop();\n },\n error: (error) => {\n $.spinner().stop();\n layerBody.innerHTML = `<p class=\"error\">${error.responseJSON.message}</p>`;\n },\n });\n });\n },\n updateFitGuideUnit: function () {\n $(\"input[name='unit-measure']\").on('click', function (e) {\n let sizes = $('.measuring-guide__size-table').find('.table-details-value');\n $('span[class^=\"_measures-\"]').addClass('d-none');\n for (let i = 0; i < sizes.length; i++) {\n let sizeMeasures = $(sizes[i]).find('span[class^=\"_measures-\"]');\n for (let el = 0; el < sizeMeasures.length; el++) {\n if ($(sizeMeasures[el]).hasClass('_measures-' + e.currentTarget.value.toLowerCase())) {\n $(sizeMeasures[el]).removeClass('d-none');\n }\n }\n }\n });\n },\n updateFitGuideSize: function () {\n $(\"select[name='choose-your-size']\").on('change', function (e) {\n let sizes = $('.measuring-guide__size-table').find('.table-details-value');\n for (let i = 0; i < sizes.length; i++) {\n if ($(sizes[i]).hasClass('fitguide-size-' + e.currentTarget.value.toLowerCase())) {\n $(sizes[i]).removeClass('d-none');\n } else {\n $(sizes[i]).addClass('d-none');\n }\n }\n });\n },\n openFitGuide: function () {\n $('.size-guidelines-button').on('click', function (e) {\n let url = e.currentTarget.dataset['getcontent'];\n if (url) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n const sizeConversionAccordion = document.querySelector('.accordion.size-conversion-accordion');\n const bodyMeasuresAccordion = document.querySelector('.accordion.body-measures-accordion');\n const productMeasuresAccordion = document.querySelector('.accordion.product-measures-accordion');\n const productCategorySizechart = document.querySelector('.accordion.product-category-sizechart-accordion');\n const genderSizeConversionAccordion = document.querySelector('.accordion.gender-size-conversion-accordion');\n const isDynamicFitguideElement = isMargiela || isJilSander;\n if(isMargiela) {\n $('ul.size-guidelines-types li').addClass('d-none');\n }\n\n if (data) {\n $('#unit-measure_0').trigger('click');\n if (data.sizeListImageUrl) {\n $('.measuring-img__sketches')\n .empty()\n .append('<img src=\"' + data.sizeListImageUrl + '\" alt=\"img\" class=\"single-image-product\" />');\n }\n if (data.sizeListOptions == \"<option value=\\\"uni\\\">UNI</option>\") {\n $('.fitguide__container--desktop').addClass('size-uni-active');\n }\n if (data.sizeListOptions) {\n $(\"select[name='choose-your-size']\")\n .empty()\n .append(data.sizeListOptions);\n }\n if (data.tableDetails) {\n $('.measuring-guide__size-table .row')\n .empty()\n .append(data.tableDetails);\n $('#fitguide-content-01')\n .css('display' , 'block');\n if(isMarni && $('#fitguide-measurement-button').length > 0) {\n $('#fitguide-measurement-button')\n .trigger('click');\n }\n $('#fitguide-measurement-button')\n .addClass('fitguide__tab-button--active')\n .closest('.tab-button')\n .css('display' , 'flex');\n\n let selectedSizePDP = $('.attribute-size .fsb-button').length ? $('.attribute-size .fsb-button').text().replace(/ /g, '').toLowerCase() : '';\n if(window.isMobile() && isMarni) {\n selectedSizePDP = $('select.select-size').length ? $('select.select-size').find(\":selected\").text().replace(/\\s+/g, '').toLowerCase() : '';\n } \n if(selectedSizePDP !== '' && $(\"#choose-your-size option[value='\" + selectedSizePDP + \"']\").length > 0) {\n $(\"select[name='choose-your-size']\")\n .val(selectedSizePDP)\n .trigger('change');\n }\n \n if (!data.fitGuideContentAsset) {\n $('#fitguide-measurement-button')\n .closest('.tab-button')\n .siblings('.empty-col')\n .addClass('col-md-12')\n .css('border-left' , '0');\n $('.click-to-convert-sizes')\n .css('display' , 'none');\n }\n }\n if (data.fitGuideContentAsset) {\n isDynamicFitguideElement && sizeConversionAccordion ? sizeConversionAccordion.classList.remove('d-none') : null;\n if(isMargiela) {\n $('.size-conversion-accordion .measuring-guide-container')\n .empty()\n .append(data.fitGuideContentAsset);\n } else {\n $('.measuring-guide-container')\n .empty()\n .append(data.fitGuideContentAsset);\n }\n $('#fitguide-sizes-button')\n .closest('.tab-button') \n .css('display' , 'flex');\n if (!data.tableDetails) {\n $('#fitguide-sizes-button')\n .addClass('fitguide__tab-button--active')\n .closest('.tab-button')\n .siblings('.empty-col')\n .addClass('col-md-10');\n $('#fitguide-content-02')\n .css('display' , 'block');\n } \n }\n if (data.productCategorySizeChartContentAsset) {\n if(isDynamicFitguideElement) {\n productCategorySizechart ? productCategorySizechart.classList.remove('d-none') : null;\n } \n $('.product-category-sizechart .measuring-guide-container')\n .empty()\n .append(data.productCategorySizeChartContentAsset);\n }\n\n if (data.genderlessGuideContentAsset) {\n if(isDynamicFitguideElement) {\n genderSizeConversionAccordion ? genderSizeConversionAccordion.classList.remove('d-none') : null;\n } \n $('.fitguige-sizes .measuring-guide-container')\n .empty()\n .append(data.genderlessGuideContentAsset);\n }\n if(data.bodyMeasurementsData && Object.keys(data.bodyMeasurementsData).length > 0) {\n const bodyMeasurementContent = bodyMeasurementTemplate(data.bodyMeasurementsData);\n if(bodyMeasuresAccordion) {\n bodyMeasuresAccordion.classList.remove('d-none');\n }\n $('#body-measures .measuring-guide-container').empty()\n .append(bodyMeasurementContent);\n\n bodyMeasurementSwitchButtons = document.querySelectorAll('.body-measures-accordion .mm-switch .mm-switch__toggle');\n if(isJilSander) {\n bodyMeasurementSwitchButtons = document.querySelectorAll('.fitguide__content .jils-change-unit-measure');\n initUnitSizeChangeBehaviour(bodyMeasurementSwitchButtons);\n }\n productMeasurementSwitchButtons = document.querySelectorAll('.product-measures-accordion .mm-switch .mm-switch__toggle');\n bodyMeasurementSwitchButtons.forEach(btn => toggleButtonClick(btn));\n productMeasurementSwitchButtons.forEach(btn => toggleButtonClick(btn));\n }\n if(isDynamicFitguideElement) {\n if (!data.fitGuideContentAsset && !data.genderlessGuideContentAsset && !data.productCategorySizeChartContentAsset && (!data.bodyMeasurementsData || Object.keys(data.bodyMeasurementsData).length == 0)){\n $('.measuring-guide-container').empty()\n }\n if(Object.keys(data.fitGuide).length > 0) {\n productMeasuresAccordion ? productMeasuresAccordion.classList.remove('d-none') : null;\n if(isJilSander) {\n if(document.querySelectorAll('.fitguide__titles .tab-button:not(.d-none)').length == 1 && productMeasuresAccordion){\n productMeasuresAccordion.querySelector('button').click();\n }\n const productMeasureInput = document.querySelector('#product-measures #interactive-unit-measure_0');\n productMeasureInput ? productMeasureInput.setAttribute('checked', true) : null;\n }\n }\n columnAndRowHighlight();\n }\n }\n },\n error: (error) => {\n alert('error');\n },\n });\n }\n });\n },\n};\n\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.window = global.window || {}));\n}(this, (function (exports) { 'use strict';\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n /*!\n * GSAP 3.9.1\n * https://greensock.com\n *\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n */\n var _config = {\n autoSleep: 120,\n force3D: \"auto\",\n nullTargetWarn: 1,\n units: {\n lineHeight: \"\"\n }\n },\n _defaults = {\n duration: .5,\n overwrite: false,\n delay: 0\n },\n _suppressOverwrites,\n _bigNum = 1e8,\n _tinyNum = 1 / _bigNum,\n _2PI = Math.PI * 2,\n _HALF_PI = _2PI / 4,\n _gsID = 0,\n _sqrt = Math.sqrt,\n _cos = Math.cos,\n _sin = Math.sin,\n _isString = function _isString(value) {\n return typeof value === \"string\";\n },\n _isFunction = function _isFunction(value) {\n return typeof value === \"function\";\n },\n _isNumber = function _isNumber(value) {\n return typeof value === \"number\";\n },\n _isUndefined = function _isUndefined(value) {\n return typeof value === \"undefined\";\n },\n _isObject = function _isObject(value) {\n return typeof value === \"object\";\n },\n _isNotFalse = function _isNotFalse(value) {\n return value !== false;\n },\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n },\n _isFuncOrString = function _isFuncOrString(value) {\n return _isFunction(value) || _isString(value);\n },\n _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\n _isArray = Array.isArray,\n _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\n _numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\n _numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\n _relExp = /[+-]=-?[.\\d]+/,\n _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\n _unitExp = /[\\d.+\\-=]+(?:e[-+]\\d*)*/i,\n _globalTimeline,\n _win,\n _coreInitted,\n _doc,\n _globals = {},\n _installScope = {},\n _coreReady,\n _install = function _install(scope) {\n return (_installScope = _merge(scope, _globals)) && gsap;\n },\n _missingPlugin = function _missingPlugin(property, value) {\n return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\n },\n _warn = function _warn(message, suppress) {\n return !suppress && console.warn(message);\n },\n _addGlobal = function _addGlobal(name, obj) {\n return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\n },\n _emptyFunc = function _emptyFunc() {\n return 0;\n },\n _reservedProps = {},\n _lazyTweens = [],\n _lazyLookup = {},\n _lastRenderedFrame,\n _plugins = {},\n _effects = {},\n _nextGCFrame = 30,\n _harnessPlugins = [],\n _callbackNames = \"\",\n _harness = function _harness(targets) {\n var target = targets[0],\n harnessPlugin,\n i;\n _isObject(target) || _isFunction(target) || (targets = [targets]);\n\n if (!(harnessPlugin = (target._gsap || {}).harness)) {\n i = _harnessPlugins.length;\n\n while (i-- && !_harnessPlugins[i].targetTest(target)) {}\n\n harnessPlugin = _harnessPlugins[i];\n }\n\n i = targets.length;\n\n while (i--) {\n targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\n }\n\n return targets;\n },\n _getCache = function _getCache(target) {\n return target._gsap || _harness(toArray(target))[0]._gsap;\n },\n _getProperty = function _getProperty(target, property, v) {\n return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\n },\n _forEachName = function _forEachName(names, func) {\n return (names = names.split(\",\")).forEach(func) || names;\n },\n _round = function _round(value) {\n return Math.round(value * 100000) / 100000 || 0;\n },\n _roundPrecise = function _roundPrecise(value) {\n return Math.round(value * 10000000) / 10000000 || 0;\n },\n _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\n var l = toFind.length,\n i = 0;\n\n for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\n\n return i < l;\n },\n _lazyRender = function _lazyRender() {\n var l = _lazyTweens.length,\n a = _lazyTweens.slice(0),\n i,\n tween;\n\n _lazyLookup = {};\n _lazyTweens.length = 0;\n\n for (i = 0; i < l; i++) {\n tween = a[i];\n tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\n }\n },\n _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\n _lazyTweens.length && _lazyRender();\n animation.render(time, suppressEvents, force);\n _lazyTweens.length && _lazyRender();\n },\n _numericIfPossible = function _numericIfPossible(value) {\n var n = parseFloat(value);\n return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\n },\n _passThrough = function _passThrough(p) {\n return p;\n },\n _setDefaults = function _setDefaults(obj, defaults) {\n for (var p in defaults) {\n p in obj || (obj[p] = defaults[p]);\n }\n\n return obj;\n },\n _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\n return function (obj, defaults) {\n for (var p in defaults) {\n p in obj || p === \"duration\" && excludeDuration || p === \"ease\" || (obj[p] = defaults[p]);\n }\n };\n },\n _merge = function _merge(base, toMerge) {\n for (var p in toMerge) {\n base[p] = toMerge[p];\n }\n\n return base;\n },\n _mergeDeep = function _mergeDeep(base, toMerge) {\n for (var p in toMerge) {\n p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\n }\n\n return base;\n },\n _copyExcluding = function _copyExcluding(obj, excluding) {\n var copy = {},\n p;\n\n for (p in obj) {\n p in excluding || (copy[p] = obj[p]);\n }\n\n return copy;\n },\n _inheritDefaults = function _inheritDefaults(vars) {\n var parent = vars.parent || _globalTimeline,\n func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\n\n if (_isNotFalse(vars.inherit)) {\n while (parent) {\n func(vars, parent.vars.defaults);\n parent = parent.parent || parent._dp;\n }\n }\n\n return vars;\n },\n _arraysMatch = function _arraysMatch(a1, a2) {\n var i = a1.length,\n match = i === a2.length;\n\n while (match && i-- && a1[i] === a2[i]) {}\n\n return i < 0;\n },\n _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = parent[lastProp],\n t;\n\n if (sortBy) {\n t = child[sortBy];\n\n while (prev && prev[sortBy] > t) {\n prev = prev._prev;\n }\n }\n\n if (prev) {\n child._next = prev._next;\n prev._next = child;\n } else {\n child._next = parent[firstProp];\n parent[firstProp] = child;\n }\n\n if (child._next) {\n child._next._prev = child;\n } else {\n parent[lastProp] = child;\n }\n\n child._prev = prev;\n child.parent = child._dp = parent;\n return child;\n },\n _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = child._prev,\n next = child._next;\n\n if (prev) {\n prev._next = next;\n } else if (parent[firstProp] === child) {\n parent[firstProp] = next;\n }\n\n if (next) {\n next._prev = prev;\n } else if (parent[lastProp] === child) {\n parent[lastProp] = prev;\n }\n\n child._next = child._prev = child.parent = null;\n },\n _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\n child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove(child);\n child._act = 0;\n },\n _uncache = function _uncache(animation, child) {\n if (animation && (!child || child._end > animation._dur || child._start < 0)) {\n var a = animation;\n\n while (a) {\n a._dirty = 1;\n a = a.parent;\n }\n }\n\n return animation;\n },\n _recacheAncestors = function _recacheAncestors(animation) {\n var parent = animation.parent;\n\n while (parent && parent.parent) {\n parent._dirty = 1;\n parent.totalDuration();\n parent = parent.parent;\n }\n\n return animation;\n },\n _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\n return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\n },\n _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\n return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\n },\n _animationCycle = function _animationCycle(tTime, cycleDuration) {\n var whole = Math.floor(tTime /= cycleDuration);\n return tTime && whole === tTime ? whole - 1 : whole;\n },\n _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\n return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\n },\n _setEnd = function _setEnd(animation) {\n return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\n },\n _alignPlayhead = function _alignPlayhead(animation, totalTime) {\n var parent = animation._dp;\n\n if (parent && parent.smoothChildTiming && animation._ts) {\n animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\n\n _setEnd(animation);\n\n parent._dirty || _uncache(parent, animation);\n }\n\n return animation;\n },\n _postAddChecks = function _postAddChecks(timeline, child) {\n var t;\n\n if (child._time || child._initted && !child._dur) {\n t = _parentToChildTotalTime(timeline.rawTime(), child);\n\n if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\n child.render(t, true);\n }\n }\n\n if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\n if (timeline._dur < timeline.duration()) {\n t = timeline;\n\n while (t._dp) {\n t.rawTime() >= 0 && t.totalTime(t._tTime);\n t = t._dp;\n }\n }\n\n timeline._zTime = -_tinyNum;\n }\n },\n _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\n child.parent && _removeFromParent(child);\n child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\n child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\n\n _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\n\n _isFromOrFromStart(child) || (timeline._recent = child);\n skipChecks || _postAddChecks(timeline, child);\n return timeline;\n },\n _scrollTrigger = function _scrollTrigger(animation, trigger) {\n return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\n },\n _attemptInitTween = function _attemptInitTween(tween, totalTime, force, suppressEvents) {\n _initTween(tween, totalTime);\n\n if (!tween._initted) {\n return 1;\n }\n\n if (!force && tween._pt && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\n _lazyTweens.push(tween);\n\n tween._lazy = [totalTime, suppressEvents];\n return 1;\n }\n },\n _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\n var parent = _ref.parent;\n return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\n },\n _isFromOrFromStart = function _isFromOrFromStart(_ref2) {\n var data = _ref2.data;\n return data === \"isFromStart\" || data === \"isStart\";\n },\n _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\n var prevRatio = tween.ratio,\n ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\n repeatDelay = tween._rDelay,\n tTime = 0,\n pt,\n iteration,\n prevIteration;\n\n if (repeatDelay && tween._repeat) {\n tTime = _clamp(0, tween._tDur, totalTime);\n iteration = _animationCycle(tTime, repeatDelay);\n tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\n\n if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\n prevRatio = 1 - ratio;\n tween.vars.repeatRefresh && tween._initted && tween.invalidate();\n }\n }\n\n if (ratio !== prevRatio || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\n if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents)) {\n return;\n }\n\n prevIteration = tween._zTime;\n tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0);\n suppressEvents || (suppressEvents = totalTime && !prevIteration);\n tween.ratio = ratio;\n tween._from && (ratio = 1 - ratio);\n tween._time = 0;\n tween._tTime = tTime;\n pt = tween._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n tween._startAt && totalTime < 0 && tween._startAt.render(totalTime, true, true);\n tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\n tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\n\n if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\n ratio && _removeFromParent(tween, 1);\n\n if (!suppressEvents) {\n _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\n\n tween._prom && tween._prom();\n }\n }\n } else if (!tween._zTime) {\n tween._zTime = totalTime;\n }\n },\n _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\n var child;\n\n if (time > prevTime) {\n child = animation._first;\n\n while (child && child._start <= time) {\n if (child.data === \"isPause\" && child._start > prevTime) {\n return child;\n }\n\n child = child._next;\n }\n } else {\n child = animation._last;\n\n while (child && child._start >= time) {\n if (child.data === \"isPause\" && child._start < prevTime) {\n return child;\n }\n\n child = child._prev;\n }\n }\n },\n _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\n var repeat = animation._repeat,\n dur = _roundPrecise(duration) || 0,\n totalProgress = animation._tTime / animation._tDur;\n totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\n animation._dur = dur;\n animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\n totalProgress > 0 && !leavePlayhead ? _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress) : animation.parent && _setEnd(animation);\n skipUncache || _uncache(animation.parent, animation);\n return animation;\n },\n _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\n return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\n },\n _zeroPosition = {\n _start: 0,\n endTime: _emptyFunc,\n totalDuration: _emptyFunc\n },\n _parsePosition = function _parsePosition(animation, position, percentAnimation) {\n var labels = animation.labels,\n recent = animation._recent || _zeroPosition,\n clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\n i,\n offset,\n isPercent;\n\n if (_isString(position) && (isNaN(position) || position in labels)) {\n offset = position.charAt(0);\n isPercent = position.substr(-1) === \"%\";\n i = position.indexOf(\"=\");\n\n if (offset === \"<\" || offset === \">\") {\n i >= 0 && (position = position.replace(/=/, \"\"));\n return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\n }\n\n if (i < 0) {\n position in labels || (labels[position] = clippedDuration);\n return labels[position];\n }\n\n offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\n\n if (isPercent && percentAnimation) {\n offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\n }\n\n return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\n }\n\n return position == null ? clippedDuration : +position;\n },\n _createTweenType = function _createTweenType(type, params, timeline) {\n var isLegacy = _isNumber(params[1]),\n varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\n vars = params[varsIndex],\n irVars,\n parent;\n\n isLegacy && (vars.duration = params[1]);\n vars.parent = timeline;\n\n if (type) {\n irVars = vars;\n parent = timeline;\n\n while (parent && !(\"immediateRender\" in irVars)) {\n irVars = parent.vars.defaults || {};\n parent = _isNotFalse(parent.vars.inherit) && parent.parent;\n }\n\n vars.immediateRender = _isNotFalse(irVars.immediateRender);\n type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1];\n }\n\n return new Tween(params[0], vars, params[varsIndex + 1]);\n },\n _conditionalReturn = function _conditionalReturn(value, func) {\n return value || value === 0 ? func(value) : func;\n },\n _clamp = function _clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n },\n getUnit = function getUnit(value, v) {\n return !_isString(value) || !(v = _unitExp.exec(value)) ? \"\" : value.substr(v.index + v[0].length);\n },\n clamp = function clamp(min, max, value) {\n return _conditionalReturn(value, function (v) {\n return _clamp(min, max, v);\n });\n },\n _slice = [].slice,\n _isArrayLike = function _isArrayLike(value, nonEmpty) {\n return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\n },\n _flatten = function _flatten(ar, leaveStrings, accumulator) {\n if (accumulator === void 0) {\n accumulator = [];\n }\n\n return ar.forEach(function (value) {\n var _accumulator;\n\n return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\n }) || accumulator;\n },\n toArray = function toArray(value, scope, leaveStrings) {\n return _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\n },\n selector = function selector(value) {\n value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\n return function (v) {\n var el = value.current || value.nativeElement || value;\n return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\n };\n },\n shuffle = function shuffle(a) {\n return a.sort(function () {\n return .5 - Math.random();\n });\n },\n distribute = function distribute(v) {\n if (_isFunction(v)) {\n return v;\n }\n\n var vars = _isObject(v) ? v : {\n each: v\n },\n ease = _parseEase(vars.ease),\n from = vars.from || 0,\n base = parseFloat(vars.base) || 0,\n cache = {},\n isDecimal = from > 0 && from < 1,\n ratios = isNaN(from) || isDecimal,\n axis = vars.axis,\n ratioX = from,\n ratioY = from;\n\n if (_isString(from)) {\n ratioX = ratioY = {\n center: .5,\n edges: .5,\n end: 1\n }[from] || 0;\n } else if (!isDecimal && ratios) {\n ratioX = from[0];\n ratioY = from[1];\n }\n\n return function (i, target, a) {\n var l = (a || vars).length,\n distances = cache[l],\n originX,\n originY,\n x,\n y,\n d,\n j,\n max,\n min,\n wrapAt;\n\n if (!distances) {\n wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\n\n if (!wrapAt) {\n max = -_bigNum;\n\n while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\n\n wrapAt--;\n }\n\n distances = cache[l] = [];\n originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\n originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\n max = 0;\n min = _bigNum;\n\n for (j = 0; j < l; j++) {\n x = j % wrapAt - originX;\n y = originY - (j / wrapAt | 0);\n distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\n d > max && (max = d);\n d < min && (min = d);\n }\n\n from === \"random\" && shuffle(distances);\n distances.max = max - min;\n distances.min = min;\n distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\n distances.b = l < 0 ? base - l : base;\n distances.u = getUnit(vars.amount || vars.each) || 0;\n ease = ease && l < 0 ? _invertEase(ease) : ease;\n }\n\n l = (distances[i] - distances.min) / distances.max || 0;\n return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u;\n };\n },\n _roundModifier = function _roundModifier(v) {\n var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length);\n return function (raw) {\n var n = Math.round(parseFloat(raw) / v) * v * p;\n return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw));\n };\n },\n snap = function snap(snapTo, value) {\n var isArray = _isArray(snapTo),\n radius,\n is2D;\n\n if (!isArray && _isObject(snapTo)) {\n radius = isArray = snapTo.radius || _bigNum;\n\n if (snapTo.values) {\n snapTo = toArray(snapTo.values);\n\n if (is2D = !_isNumber(snapTo[0])) {\n radius *= radius;\n }\n } else {\n snapTo = _roundModifier(snapTo.increment);\n }\n }\n\n return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\n is2D = snapTo(raw);\n return Math.abs(is2D - raw) <= radius ? is2D : raw;\n } : function (raw) {\n var x = parseFloat(is2D ? raw.x : raw),\n y = parseFloat(is2D ? raw.y : 0),\n min = _bigNum,\n closest = 0,\n i = snapTo.length,\n dx,\n dy;\n\n while (i--) {\n if (is2D) {\n dx = snapTo[i].x - x;\n dy = snapTo[i].y - y;\n dx = dx * dx + dy * dy;\n } else {\n dx = Math.abs(snapTo[i] - x);\n }\n\n if (dx < min) {\n min = dx;\n closest = i;\n }\n }\n\n closest = !radius || min <= radius ? snapTo[closest] : raw;\n return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\n });\n },\n random = function random(min, max, roundingIncrement, returnFunction) {\n return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\n return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\n });\n },\n pipe = function pipe() {\n for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\n functions[_key] = arguments[_key];\n }\n\n return function (value) {\n return functions.reduce(function (v, f) {\n return f(v);\n }, value);\n };\n },\n unitize = function unitize(func, unit) {\n return function (value) {\n return func(parseFloat(value)) + (unit || getUnit(value));\n };\n },\n normalize = function normalize(min, max, value) {\n return mapRange(min, max, 0, 1, value);\n },\n _wrapArray = function _wrapArray(a, wrapper, value) {\n return _conditionalReturn(value, function (index) {\n return a[~~wrapper(index)];\n });\n },\n wrap = function wrap(min, max, value) {\n var range = max - min;\n return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\n return (range + (value - min) % range) % range + min;\n });\n },\n wrapYoyo = function wrapYoyo(min, max, value) {\n var range = max - min,\n total = range * 2;\n return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\n value = (total + (value - min) % total) % total || 0;\n return min + (value > range ? total - value : value);\n });\n },\n _replaceRandom = function _replaceRandom(value) {\n var prev = 0,\n s = \"\",\n i,\n nums,\n end,\n isArray;\n\n while (~(i = value.indexOf(\"random(\", prev))) {\n end = value.indexOf(\")\", i);\n isArray = value.charAt(i + 7) === \"[\";\n nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\n s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\n prev = end + 1;\n }\n\n return s + value.substr(prev, value.length - prev);\n },\n mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\n var inRange = inMax - inMin,\n outRange = outMax - outMin;\n return _conditionalReturn(value, function (value) {\n return outMin + ((value - inMin) / inRange * outRange || 0);\n });\n },\n interpolate = function interpolate(start, end, progress, mutate) {\n var func = isNaN(start + end) ? 0 : function (p) {\n return (1 - p) * start + p * end;\n };\n\n if (!func) {\n var isString = _isString(start),\n master = {},\n p,\n i,\n interpolators,\n l,\n il;\n\n progress === true && (mutate = 1) && (progress = null);\n\n if (isString) {\n start = {\n p: start\n };\n end = {\n p: end\n };\n } else if (_isArray(start) && !_isArray(end)) {\n interpolators = [];\n l = start.length;\n il = l - 2;\n\n for (i = 1; i < l; i++) {\n interpolators.push(interpolate(start[i - 1], start[i]));\n }\n\n l--;\n\n func = function func(p) {\n p *= l;\n var i = Math.min(il, ~~p);\n return interpolators[i](p - i);\n };\n\n progress = end;\n } else if (!mutate) {\n start = _merge(_isArray(start) ? [] : {}, start);\n }\n\n if (!interpolators) {\n for (p in end) {\n _addPropTween.call(master, start, p, \"get\", end[p]);\n }\n\n func = function func(p) {\n return _renderPropTweens(p, master) || (isString ? start.p : start);\n };\n }\n }\n\n return _conditionalReturn(progress, func);\n },\n _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\n var labels = timeline.labels,\n min = _bigNum,\n p,\n distance,\n label;\n\n for (p in labels) {\n distance = labels[p] - fromTime;\n\n if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\n label = p;\n min = distance;\n }\n }\n\n return label;\n },\n _callback = function _callback(animation, type, executeLazyFirst) {\n var v = animation.vars,\n callback = v[type],\n params,\n scope;\n\n if (!callback) {\n return;\n }\n\n params = v[type + \"Params\"];\n scope = v.callbackScope || animation;\n executeLazyFirst && _lazyTweens.length && _lazyRender();\n return params ? callback.apply(scope, params) : callback.call(scope);\n },\n _interrupt = function _interrupt(animation) {\n _removeFromParent(animation);\n\n animation.scrollTrigger && animation.scrollTrigger.kill(false);\n animation.progress() < 1 && _callback(animation, \"onInterrupt\");\n return animation;\n },\n _quickTween,\n _createPlugin = function _createPlugin(config) {\n config = !config.name && config[\"default\"] || config;\n\n var name = config.name,\n isFunc = _isFunction(config),\n Plugin = name && !isFunc && config.init ? function () {\n this._props = [];\n } : config,\n instanceDefaults = {\n init: _emptyFunc,\n render: _renderPropTweens,\n add: _addPropTween,\n kill: _killPropTweensOf,\n modifier: _addPluginModifier,\n rawVars: 0\n },\n statics = {\n targetTest: 0,\n get: 0,\n getSetter: _getSetter,\n aliases: {},\n register: 0\n };\n\n _wake();\n\n if (config !== Plugin) {\n if (_plugins[name]) {\n return;\n }\n\n _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics));\n\n _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics)));\n\n _plugins[Plugin.prop = name] = Plugin;\n\n if (config.targetTest) {\n _harnessPlugins.push(Plugin);\n\n _reservedProps[name] = 1;\n }\n\n name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\";\n }\n\n _addGlobal(name, Plugin);\n\n config.register && config.register(gsap, Plugin, PropTween);\n },\n _255 = 255,\n _colorLookup = {\n aqua: [0, _255, _255],\n lime: [0, _255, 0],\n silver: [192, 192, 192],\n black: [0, 0, 0],\n maroon: [128, 0, 0],\n teal: [0, 128, 128],\n blue: [0, 0, _255],\n navy: [0, 0, 128],\n white: [_255, _255, _255],\n olive: [128, 128, 0],\n yellow: [_255, _255, 0],\n orange: [_255, 165, 0],\n gray: [128, 128, 128],\n purple: [128, 0, 128],\n green: [0, 128, 0],\n red: [_255, 0, 0],\n pink: [_255, 192, 203],\n cyan: [0, _255, _255],\n transparent: [_255, _255, _255, 0]\n },\n _hue = function _hue(h, m1, m2) {\n h += h < 0 ? 1 : h > 1 ? -1 : 0;\n return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\n },\n splitColor = function splitColor(v, toHSL, forceAlpha) {\n var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\n r,\n g,\n b,\n h,\n s,\n l,\n max,\n min,\n d,\n wasHSL;\n\n if (!a) {\n if (v.substr(-1) === \",\") {\n v = v.substr(0, v.length - 1);\n }\n\n if (_colorLookup[v]) {\n a = _colorLookup[v];\n } else if (v.charAt(0) === \"#\") {\n if (v.length < 6) {\n r = v.charAt(1);\n g = v.charAt(2);\n b = v.charAt(3);\n v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\n }\n\n if (v.length === 9) {\n a = parseInt(v.substr(1, 6), 16);\n return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\n }\n\n v = parseInt(v.substr(1), 16);\n a = [v >> 16, v >> 8 & _255, v & _255];\n } else if (v.substr(0, 3) === \"hsl\") {\n a = wasHSL = v.match(_strictNumExp);\n\n if (!toHSL) {\n h = +a[0] % 360 / 360;\n s = +a[1] / 100;\n l = +a[2] / 100;\n g = l <= .5 ? l * (s + 1) : l + s - l * s;\n r = l * 2 - g;\n a.length > 3 && (a[3] *= 1);\n a[0] = _hue(h + 1 / 3, r, g);\n a[1] = _hue(h, r, g);\n a[2] = _hue(h - 1 / 3, r, g);\n } else if (~v.indexOf(\"=\")) {\n a = v.match(_numExp);\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n }\n } else {\n a = v.match(_strictNumExp) || _colorLookup.transparent;\n }\n\n a = a.map(Number);\n }\n\n if (toHSL && !wasHSL) {\n r = a[0] / _255;\n g = a[1] / _255;\n b = a[2] / _255;\n max = Math.max(r, g, b);\n min = Math.min(r, g, b);\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h *= 60;\n }\n\n a[0] = ~~(h + .5);\n a[1] = ~~(s * 100 + .5);\n a[2] = ~~(l * 100 + .5);\n }\n\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n },\n _colorOrderData = function _colorOrderData(v) {\n var values = [],\n c = [],\n i = -1;\n v.split(_colorExp).forEach(function (v) {\n var a = v.match(_numWithUnitExp) || [];\n values.push.apply(values, a);\n c.push(i += a.length + 1);\n });\n values.c = c;\n return values;\n },\n _formatColors = function _formatColors(s, toHSL, orderMatchData) {\n var result = \"\",\n colors = (s + result).match(_colorExp),\n type = toHSL ? \"hsla(\" : \"rgba(\",\n i = 0,\n c,\n shell,\n d,\n l;\n\n if (!colors) {\n return s;\n }\n\n colors = colors.map(function (color) {\n return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\n });\n\n if (orderMatchData) {\n d = _colorOrderData(s);\n c = orderMatchData.c;\n\n if (c.join(result) !== d.c.join(result)) {\n shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\n }\n }\n }\n\n if (!shell) {\n shell = s.split(_colorExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + colors[i];\n }\n }\n\n return result + shell[l];\n },\n _colorExp = function () {\n var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\n p;\n\n for (p in _colorLookup) {\n s += \"|\" + p + \"\\\\b\";\n }\n\n return new RegExp(s + \")\", \"gi\");\n }(),\n _hslExp = /hsl[a]?\\(/,\n _colorStringFilter = function _colorStringFilter(a) {\n var combined = a.join(\" \"),\n toHSL;\n _colorExp.lastIndex = 0;\n\n if (_colorExp.test(combined)) {\n toHSL = _hslExp.test(combined);\n a[1] = _formatColors(a[1], toHSL);\n a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1]));\n return true;\n }\n },\n _tickerActive,\n _ticker = function () {\n var _getTime = Date.now,\n _lagThreshold = 500,\n _adjustedLag = 33,\n _startTime = _getTime(),\n _lastUpdate = _startTime,\n _gap = 1000 / 240,\n _nextTime = _gap,\n _listeners = [],\n _id,\n _req,\n _raf,\n _self,\n _delta,\n _i,\n _tick = function _tick(v) {\n var elapsed = _getTime() - _lastUpdate,\n manual = v === true,\n overlap,\n dispatch,\n time,\n frame;\n\n elapsed > _lagThreshold && (_startTime += elapsed - _adjustedLag);\n _lastUpdate += elapsed;\n time = _lastUpdate - _startTime;\n overlap = time - _nextTime;\n\n if (overlap > 0 || manual) {\n frame = ++_self.frame;\n _delta = time - _self.time * 1000;\n _self.time = time = time / 1000;\n _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\n dispatch = 1;\n }\n\n manual || (_id = _req(_tick));\n\n if (dispatch) {\n for (_i = 0; _i < _listeners.length; _i++) {\n _listeners[_i](time, _delta, frame, v);\n }\n }\n };\n\n _self = {\n time: 0,\n frame: 0,\n tick: function tick() {\n _tick(true);\n },\n deltaRatio: function deltaRatio(fps) {\n return _delta / (1000 / (fps || 60));\n },\n wake: function wake() {\n if (_coreReady) {\n if (!_coreInitted && _windowExists()) {\n _win = _coreInitted = window;\n _doc = _win.document || {};\n _globals.gsap = gsap;\n (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\n\n _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\n\n _raf = _win.requestAnimationFrame;\n }\n\n _id && _self.sleep();\n\n _req = _raf || function (f) {\n return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\n };\n\n _tickerActive = 1;\n\n _tick(2);\n }\n },\n sleep: function sleep() {\n (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id);\n _tickerActive = 0;\n _req = _emptyFunc;\n },\n lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\n _lagThreshold = threshold || 1 / _tinyNum;\n _adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n },\n fps: function fps(_fps) {\n _gap = 1000 / (_fps || 240);\n _nextTime = _self.time * 1000 + _gap;\n },\n add: function add(callback) {\n _listeners.indexOf(callback) < 0 && _listeners.push(callback);\n\n _wake();\n },\n remove: function remove(callback, i) {\n ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\n },\n _listeners: _listeners\n };\n return _self;\n }(),\n _wake = function _wake() {\n return !_tickerActive && _ticker.wake();\n },\n _easeMap = {},\n _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\n _quotesExp = /[\"']/g,\n _parseObjectInString = function _parseObjectInString(value) {\n var obj = {},\n split = value.substr(1, value.length - 3).split(\":\"),\n key = split[0],\n i = 1,\n l = split.length,\n index,\n val,\n parsedVal;\n\n for (; i < l; i++) {\n val = split[i];\n index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\n parsedVal = val.substr(0, index);\n obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\n key = val.substr(index + 1).trim();\n }\n\n return obj;\n },\n _valueInParentheses = function _valueInParentheses(value) {\n var open = value.indexOf(\"(\") + 1,\n close = value.indexOf(\")\"),\n nested = value.indexOf(\"(\", open);\n return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\n },\n _configEaseFromString = function _configEaseFromString(name) {\n var split = (name + \"\").split(\"(\"),\n ease = _easeMap[split[0]];\n return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\n },\n _invertEase = function _invertEase(ease) {\n return function (p) {\n return 1 - ease(1 - p);\n };\n },\n _propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\n var child = timeline._first,\n ease;\n\n while (child) {\n if (child instanceof Timeline) {\n _propagateYoyoEase(child, isYoyo);\n } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\n if (child.timeline) {\n _propagateYoyoEase(child.timeline, isYoyo);\n } else {\n ease = child._ease;\n child._ease = child._yEase;\n child._yEase = ease;\n child._yoyo = isYoyo;\n }\n }\n\n child = child._next;\n }\n },\n _parseEase = function _parseEase(ease, defaultEase) {\n return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\n },\n _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\n if (easeOut === void 0) {\n easeOut = function easeOut(p) {\n return 1 - easeIn(1 - p);\n };\n }\n\n if (easeInOut === void 0) {\n easeInOut = function easeInOut(p) {\n return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\n };\n }\n\n var ease = {\n easeIn: easeIn,\n easeOut: easeOut,\n easeInOut: easeInOut\n },\n lowercaseName;\n\n _forEachName(names, function (name) {\n _easeMap[name] = _globals[name] = ease;\n _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\n\n for (var p in ease) {\n _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\n }\n });\n\n return ease;\n },\n _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\n return function (p) {\n return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\n };\n },\n _configElastic = function _configElastic(type, amplitude, period) {\n var p1 = amplitude >= 1 ? amplitude : 1,\n p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\n p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\n easeOut = function easeOut(p) {\n return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n p2 = _2PI / p2;\n\n ease.config = function (amplitude, period) {\n return _configElastic(type, amplitude, period);\n };\n\n return ease;\n },\n _configBack = function _configBack(type, overshoot) {\n if (overshoot === void 0) {\n overshoot = 1.70158;\n }\n\n var easeOut = function easeOut(p) {\n return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n ease.config = function (overshoot) {\n return _configBack(type, overshoot);\n };\n\n return ease;\n };\n\n _forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\n var power = i < 5 ? i + 1 : i;\n\n _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\n return Math.pow(p, power);\n } : function (p) {\n return p;\n }, function (p) {\n return 1 - Math.pow(1 - p, power);\n }, function (p) {\n return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\n });\n });\n\n _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\n\n _insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\n\n (function (n, c) {\n var n1 = 1 / c,\n n2 = 2 * n1,\n n3 = 2.5 * n1,\n easeOut = function easeOut(p) {\n return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\n };\n\n _insertEase(\"Bounce\", function (p) {\n return 1 - easeOut(1 - p);\n }, easeOut);\n })(7.5625, 2.75);\n\n _insertEase(\"Expo\", function (p) {\n return p ? Math.pow(2, 10 * (p - 1)) : 0;\n });\n\n _insertEase(\"Circ\", function (p) {\n return -(_sqrt(1 - p * p) - 1);\n });\n\n _insertEase(\"Sine\", function (p) {\n return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\n });\n\n _insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\n\n _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\n config: function config(steps, immediateStart) {\n if (steps === void 0) {\n steps = 1;\n }\n\n var p1 = 1 / steps,\n p2 = steps + (immediateStart ? 0 : 1),\n p3 = immediateStart ? 1 : 0,\n max = 1 - _tinyNum;\n return function (p) {\n return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\n };\n }\n };\n _defaults.ease = _easeMap[\"quad.out\"];\n\n _forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\n return _callbackNames += name + \",\" + name + \"Params,\";\n });\n\n var GSCache = function GSCache(target, harness) {\n this.id = _gsID++;\n target._gsap = this;\n this.target = target;\n this.harness = harness;\n this.get = harness ? harness.get : _getProperty;\n this.set = harness ? harness.getSetter : _getSetter;\n };\n var Animation = function () {\n function Animation(vars) {\n this.vars = vars;\n this._delay = +vars.delay || 0;\n\n if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\n this._rDelay = vars.repeatDelay || 0;\n this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\n }\n\n this._ts = 1;\n\n _setDuration(this, +vars.duration, 1, 1);\n\n this.data = vars.data;\n _tickerActive || _ticker.wake();\n }\n\n var _proto = Animation.prototype;\n\n _proto.delay = function delay(value) {\n if (value || value === 0) {\n this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\n this._delay = value;\n return this;\n }\n\n return this._delay;\n };\n\n _proto.duration = function duration(value) {\n return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\n };\n\n _proto.totalDuration = function totalDuration(value) {\n if (!arguments.length) {\n return this._tDur;\n }\n\n this._dirty = 0;\n return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\n };\n\n _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\n _wake();\n\n if (!arguments.length) {\n return this._tTime;\n }\n\n var parent = this._dp;\n\n if (parent && parent.smoothChildTiming && this._ts) {\n _alignPlayhead(this, _totalTime);\n\n !parent._dp || parent.parent || _postAddChecks(parent, this);\n\n while (parent && parent.parent) {\n if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\n parent.totalTime(parent._tTime, true);\n }\n\n parent = parent.parent;\n }\n\n if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\n _addToTimeline(this._dp, this, this._start - this._delay);\n }\n }\n\n if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\n this._ts || (this._pTime = _totalTime);\n\n _lazySafeRender(this, _totalTime, suppressEvents);\n }\n\n return this;\n };\n\n _proto.time = function time(value, suppressEvents) {\n return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time;\n };\n\n _proto.totalProgress = function totalProgress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.ratio;\n };\n\n _proto.progress = function progress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.ratio;\n };\n\n _proto.iteration = function iteration(value, suppressEvents) {\n var cycleDuration = this.duration() + this._rDelay;\n\n return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\n };\n\n _proto.timeScale = function timeScale(value) {\n if (!arguments.length) {\n return this._rts === -_tinyNum ? 0 : this._rts;\n }\n\n if (this._rts === value) {\n return this;\n }\n\n var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime;\n this._rts = +value || 0;\n this._ts = this._ps || value === -_tinyNum ? 0 : this._rts;\n\n _recacheAncestors(this.totalTime(_clamp(-this._delay, this._tDur, tTime), true));\n\n _setEnd(this);\n\n return this;\n };\n\n _proto.paused = function paused(value) {\n if (!arguments.length) {\n return this._ps;\n }\n\n if (this._ps !== value) {\n this._ps = value;\n\n if (value) {\n this._pTime = this._tTime || Math.max(-this._delay, this.rawTime());\n this._ts = this._act = 0;\n } else {\n _wake();\n\n this._ts = this._rts;\n this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum));\n }\n }\n\n return this;\n };\n\n _proto.startTime = function startTime(value) {\n if (arguments.length) {\n this._start = value;\n var parent = this.parent || this._dp;\n parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\n return this;\n }\n\n return this._start;\n };\n\n _proto.endTime = function endTime(includeRepeats) {\n return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\n };\n\n _proto.rawTime = function rawTime(wrapRepeats) {\n var parent = this.parent || this._dp;\n return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\n };\n\n _proto.globalTime = function globalTime(rawTime) {\n var animation = this,\n time = arguments.length ? rawTime : animation.rawTime();\n\n while (animation) {\n time = animation._start + time / (animation._ts || 1);\n animation = animation._dp;\n }\n\n return time;\n };\n\n _proto.repeat = function repeat(value) {\n if (arguments.length) {\n this._repeat = value === Infinity ? -2 : value;\n return _onUpdateTotalDuration(this);\n }\n\n return this._repeat === -2 ? Infinity : this._repeat;\n };\n\n _proto.repeatDelay = function repeatDelay(value) {\n if (arguments.length) {\n var time = this._time;\n this._rDelay = value;\n\n _onUpdateTotalDuration(this);\n\n return time ? this.time(time) : this;\n }\n\n return this._rDelay;\n };\n\n _proto.yoyo = function yoyo(value) {\n if (arguments.length) {\n this._yoyo = value;\n return this;\n }\n\n return this._yoyo;\n };\n\n _proto.seek = function seek(position, suppressEvents) {\n return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\n };\n\n _proto.restart = function restart(includeDelay, suppressEvents) {\n return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\n };\n\n _proto.play = function play(from, suppressEvents) {\n from != null && this.seek(from, suppressEvents);\n return this.reversed(false).paused(false);\n };\n\n _proto.reverse = function reverse(from, suppressEvents) {\n from != null && this.seek(from || this.totalDuration(), suppressEvents);\n return this.reversed(true).paused(false);\n };\n\n _proto.pause = function pause(atTime, suppressEvents) {\n atTime != null && this.seek(atTime, suppressEvents);\n return this.paused(true);\n };\n\n _proto.resume = function resume() {\n return this.paused(false);\n };\n\n _proto.reversed = function reversed(value) {\n if (arguments.length) {\n !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0));\n return this;\n }\n\n return this._rts < 0;\n };\n\n _proto.invalidate = function invalidate() {\n this._initted = this._act = 0;\n this._zTime = -_tinyNum;\n return this;\n };\n\n _proto.isActive = function isActive() {\n var parent = this.parent || this._dp,\n start = this._start,\n rawTime;\n return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\n };\n\n _proto.eventCallback = function eventCallback(type, callback, params) {\n var vars = this.vars;\n\n if (arguments.length > 1) {\n if (!callback) {\n delete vars[type];\n } else {\n vars[type] = callback;\n params && (vars[type + \"Params\"] = params);\n type === \"onUpdate\" && (this._onUpdate = callback);\n }\n\n return this;\n }\n\n return vars[type];\n };\n\n _proto.then = function then(onFulfilled) {\n var self = this;\n return new Promise(function (resolve) {\n var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\n _resolve = function _resolve() {\n var _then = self.then;\n self.then = null;\n _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\n resolve(f);\n self.then = _then;\n };\n\n if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\n _resolve();\n } else {\n self._prom = _resolve;\n }\n });\n };\n\n _proto.kill = function kill() {\n _interrupt(this);\n };\n\n return Animation;\n }();\n\n _setDefaults(Animation.prototype, {\n _time: 0,\n _start: 0,\n _end: 0,\n _tTime: 0,\n _tDur: 0,\n _dirty: 0,\n _repeat: 0,\n _yoyo: false,\n parent: null,\n _initted: false,\n _rDelay: 0,\n _ts: 1,\n _dp: 0,\n ratio: 0,\n _zTime: -_tinyNum,\n _prom: 0,\n _ps: false,\n _rts: 1\n });\n\n var Timeline = function (_Animation) {\n _inheritsLoose(Timeline, _Animation);\n\n function Timeline(vars, position) {\n var _this;\n\n if (vars === void 0) {\n vars = {};\n }\n\n _this = _Animation.call(this, vars) || this;\n _this.labels = {};\n _this.smoothChildTiming = !!vars.smoothChildTiming;\n _this.autoRemoveChildren = !!vars.autoRemoveChildren;\n _this._sort = _isNotFalse(vars.sortChildren);\n _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\n vars.reversed && _this.reverse();\n vars.paused && _this.paused(true);\n vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\n return _this;\n }\n\n var _proto2 = Timeline.prototype;\n\n _proto2.to = function to(targets, vars, position) {\n _createTweenType(0, arguments, this);\n\n return this;\n };\n\n _proto2.from = function from(targets, vars, position) {\n _createTweenType(1, arguments, this);\n\n return this;\n };\n\n _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\n _createTweenType(2, arguments, this);\n\n return this;\n };\n\n _proto2.set = function set(targets, vars, position) {\n vars.duration = 0;\n vars.parent = this;\n _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\n vars.immediateRender = !!vars.immediateRender;\n new Tween(targets, vars, _parsePosition(this, position), 1);\n return this;\n };\n\n _proto2.call = function call(callback, params, position) {\n return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\n };\n\n _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.duration = duration;\n vars.stagger = vars.stagger || stagger;\n vars.onComplete = onCompleteAll;\n vars.onCompleteParams = onCompleteAllParams;\n vars.parent = this;\n new Tween(targets, vars, _parsePosition(this, position));\n return this;\n };\n\n _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.runBackwards = 1;\n _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\n return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\n toVars.startAt = fromVars;\n _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\n return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._dirty ? this.totalDuration() : this._tDur,\n dur = this._dur,\n tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\n crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\n time,\n child,\n next,\n iteration,\n cycleDuration,\n prevPaused,\n pauseTween,\n timeScale,\n prevStart,\n prevIteration,\n yoyo,\n isYoyo;\n this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\n\n if (tTime !== this._tTime || force || crossingStart) {\n if (prevTime !== this._time && dur) {\n tTime += this._time - prevTime;\n totalTime += this._time - prevTime;\n }\n\n time = tTime;\n prevStart = this._start;\n timeScale = this._ts;\n prevPaused = !timeScale;\n\n if (crossingStart) {\n dur || (prevTime = this._zTime);\n (totalTime || !suppressEvents) && (this._zTime = totalTime);\n }\n\n if (this._repeat) {\n yoyo = this._yoyo;\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && totalTime < 0) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration);\n\n if (tTime === tDur) {\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n !prevTime && this._tTime && prevIteration !== iteration && (prevIteration = iteration);\n\n if (yoyo && iteration & 1) {\n time = dur - time;\n isYoyo = 1;\n }\n\n if (iteration !== prevIteration && !this._lock) {\n var rewinding = yoyo && prevIteration & 1,\n doesWrap = rewinding === (yoyo && iteration & 1);\n iteration < prevIteration && (rewinding = !rewinding);\n prevTime = rewinding ? 0 : dur;\n this._lock = 1;\n this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\n this._tTime = tTime;\n !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\n\n if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\n return this;\n }\n\n dur = this._dur;\n tDur = this._tDur;\n\n if (doesWrap) {\n this._lock = 2;\n prevTime = rewinding ? dur : -0.0001;\n this.render(prevTime, true);\n this.vars.repeatRefresh && !isYoyo && this.invalidate();\n }\n\n this._lock = 0;\n\n if (!this._ts && !prevPaused) {\n return this;\n }\n\n _propagateYoyoEase(this, isYoyo);\n }\n }\n\n if (this._hasPause && !this._forcing && this._lock < 2) {\n pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\n\n if (pauseTween) {\n tTime -= time - (time = pauseTween._start);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n this._act = !timeScale;\n\n if (!this._initted) {\n this._onUpdate = this.vars.onUpdate;\n this._initted = 1;\n this._zTime = totalTime;\n prevTime = 0;\n }\n\n if (!prevTime && time && !suppressEvents) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n return this;\n }\n }\n\n if (time >= prevTime && totalTime >= 0) {\n child = this._first;\n\n while (child) {\n next = child._next;\n\n if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\n\n if (time !== this._time || !this._ts && !prevPaused) {\n pauseTween = 0;\n next && (tTime += this._zTime = -_tinyNum);\n break;\n }\n }\n\n child = next;\n }\n } else {\n child = this._last;\n var adjustedTime = totalTime < 0 ? totalTime : time;\n\n while (child) {\n next = child._prev;\n\n if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force);\n\n if (time !== this._time || !this._ts && !prevPaused) {\n pauseTween = 0;\n next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum);\n break;\n }\n }\n\n child = next;\n }\n }\n\n if (pauseTween && !suppressEvents) {\n this.pause();\n pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\n\n if (this._ts) {\n this._start = prevStart;\n\n _setEnd(this);\n\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\n if (tTime === tDur && tDur >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\n (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);\n\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\n _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto2.add = function add(child, position) {\n var _this2 = this;\n\n _isNumber(position) || (position = _parsePosition(this, position, child));\n\n if (!(child instanceof Animation)) {\n if (_isArray(child)) {\n child.forEach(function (obj) {\n return _this2.add(obj, position);\n });\n return this;\n }\n\n if (_isString(child)) {\n return this.addLabel(child, position);\n }\n\n if (_isFunction(child)) {\n child = Tween.delayedCall(0, child);\n } else {\n return this;\n }\n }\n\n return this !== child ? _addToTimeline(this, child, position) : this;\n };\n\n _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\n if (nested === void 0) {\n nested = true;\n }\n\n if (tweens === void 0) {\n tweens = true;\n }\n\n if (timelines === void 0) {\n timelines = true;\n }\n\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = -_bigNum;\n }\n\n var a = [],\n child = this._first;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n if (child instanceof Tween) {\n tweens && a.push(child);\n } else {\n timelines && a.push(child);\n nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\n }\n }\n\n child = child._next;\n }\n\n return a;\n };\n\n _proto2.getById = function getById(id) {\n var animations = this.getChildren(1, 1, 1),\n i = animations.length;\n\n while (i--) {\n if (animations[i].vars.id === id) {\n return animations[i];\n }\n }\n };\n\n _proto2.remove = function remove(child) {\n if (_isString(child)) {\n return this.removeLabel(child);\n }\n\n if (_isFunction(child)) {\n return this.killTweensOf(child);\n }\n\n _removeLinkedListItem(this, child);\n\n if (child === this._recent) {\n this._recent = this._last;\n }\n\n return _uncache(this);\n };\n\n _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\n if (!arguments.length) {\n return this._tTime;\n }\n\n this._forcing = 1;\n\n if (!this._dp && this._ts) {\n this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\n }\n\n _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\n\n this._forcing = 0;\n return this;\n };\n\n _proto2.addLabel = function addLabel(label, position) {\n this.labels[label] = _parsePosition(this, position);\n return this;\n };\n\n _proto2.removeLabel = function removeLabel(label) {\n delete this.labels[label];\n return this;\n };\n\n _proto2.addPause = function addPause(position, callback, params) {\n var t = Tween.delayedCall(0, callback || _emptyFunc, params);\n t.data = \"isPause\";\n this._hasPause = 1;\n return _addToTimeline(this, t, _parsePosition(this, position));\n };\n\n _proto2.removePause = function removePause(position) {\n var child = this._first;\n position = _parsePosition(this, position);\n\n while (child) {\n if (child._start === position && child.data === \"isPause\") {\n _removeFromParent(child);\n }\n\n child = child._next;\n }\n };\n\n _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n var tweens = this.getTweensOf(targets, onlyActive),\n i = tweens.length;\n\n while (i--) {\n _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\n }\n\n return this;\n };\n\n _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\n var a = [],\n parsedTargets = toArray(targets),\n child = this._first,\n isGlobalTime = _isNumber(onlyActive),\n children;\n\n while (child) {\n if (child instanceof Tween) {\n if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\n a.push(child);\n }\n } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\n a.push.apply(a, children);\n }\n\n child = child._next;\n }\n\n return a;\n };\n\n _proto2.tweenTo = function tweenTo(position, vars) {\n vars = vars || {};\n\n var tl = this,\n endTime = _parsePosition(tl, position),\n _vars = vars,\n startAt = _vars.startAt,\n _onStart = _vars.onStart,\n onStartParams = _vars.onStartParams,\n immediateRender = _vars.immediateRender,\n initted,\n tween = Tween.to(tl, _setDefaults({\n ease: vars.ease || \"none\",\n lazy: false,\n immediateRender: false,\n time: endTime,\n overwrite: \"auto\",\n duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\n onStart: function onStart() {\n tl.pause();\n\n if (!initted) {\n var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\n tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\n initted = 1;\n }\n\n _onStart && _onStart.apply(tween, onStartParams || []);\n }\n }, vars));\n\n return immediateRender ? tween.render(0) : tween;\n };\n\n _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\n return this.tweenTo(toPosition, _setDefaults({\n startAt: {\n time: _parsePosition(this, fromPosition)\n }\n }, vars));\n };\n\n _proto2.recent = function recent() {\n return this._recent;\n };\n\n _proto2.nextLabel = function nextLabel(afterTime) {\n if (afterTime === void 0) {\n afterTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, afterTime));\n };\n\n _proto2.previousLabel = function previousLabel(beforeTime) {\n if (beforeTime === void 0) {\n beforeTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\n };\n\n _proto2.currentLabel = function currentLabel(value) {\n return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\n };\n\n _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = 0;\n }\n\n var child = this._first,\n labels = this.labels,\n p;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n child._start += amount;\n child._end += amount;\n }\n\n child = child._next;\n }\n\n if (adjustLabels) {\n for (p in labels) {\n if (labels[p] >= ignoreBeforeTime) {\n labels[p] += amount;\n }\n }\n }\n\n return _uncache(this);\n };\n\n _proto2.invalidate = function invalidate() {\n var child = this._first;\n this._lock = 0;\n\n while (child) {\n child.invalidate();\n child = child._next;\n }\n\n return _Animation.prototype.invalidate.call(this);\n };\n\n _proto2.clear = function clear(includeLabels) {\n if (includeLabels === void 0) {\n includeLabels = true;\n }\n\n var child = this._first,\n next;\n\n while (child) {\n next = child._next;\n this.remove(child);\n child = next;\n }\n\n this._dp && (this._time = this._tTime = this._pTime = 0);\n includeLabels && (this.labels = {});\n return _uncache(this);\n };\n\n _proto2.totalDuration = function totalDuration(value) {\n var max = 0,\n self = this,\n child = self._last,\n prevStart = _bigNum,\n prev,\n start,\n parent;\n\n if (arguments.length) {\n return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\n }\n\n if (self._dirty) {\n parent = self.parent;\n\n while (child) {\n prev = child._prev;\n child._dirty && child.totalDuration();\n start = child._start;\n\n if (start > prevStart && self._sort && child._ts && !self._lock) {\n self._lock = 1;\n _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\n } else {\n prevStart = start;\n }\n\n if (start < 0 && child._ts) {\n max -= start;\n\n if (!parent && !self._dp || parent && parent.smoothChildTiming) {\n self._start += start / self._ts;\n self._time -= start;\n self._tTime -= start;\n }\n\n self.shiftChildren(-start, false, -1e999);\n prevStart = 0;\n }\n\n child._end > max && child._ts && (max = child._end);\n child = prev;\n }\n\n _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\n\n self._dirty = 0;\n }\n\n return self._tDur;\n };\n\n Timeline.updateRoot = function updateRoot(time) {\n if (_globalTimeline._ts) {\n _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\n\n _lastRenderedFrame = _ticker.frame;\n }\n\n if (_ticker.frame >= _nextGCFrame) {\n _nextGCFrame += _config.autoSleep || 120;\n var child = _globalTimeline._first;\n if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\n while (child && !child._ts) {\n child = child._next;\n }\n\n child || _ticker.sleep();\n }\n }\n };\n\n return Timeline;\n }(Animation);\n\n _setDefaults(Timeline.prototype, {\n _lock: 0,\n _hasPause: 0,\n _forcing: 0\n });\n\n var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\n var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\n index = 0,\n matchIndex = 0,\n result,\n startNums,\n color,\n endNum,\n chunk,\n startNum,\n hasRandom,\n a;\n pt.b = start;\n pt.e = end;\n start += \"\";\n end += \"\";\n\n if (hasRandom = ~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (stringFilter) {\n a = [start, end];\n stringFilter(a, target, prop);\n start = a[0];\n end = a[1];\n }\n\n startNums = start.match(_complexStringNumExp) || [];\n\n while (result = _complexStringNumExp.exec(end)) {\n endNum = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\") {\n color = 1;\n }\n\n if (endNum !== startNums[matchIndex++]) {\n startNum = parseFloat(startNums[matchIndex - 1]) || 0;\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n s: startNum,\n c: endNum.charAt(1) === \"=\" ? parseFloat(endNum.substr(2)) * (endNum.charAt(0) === \"-\" ? -1 : 1) : parseFloat(endNum) - startNum,\n m: color && color < 4 ? Math.round : 0\n };\n index = _complexStringNumExp.lastIndex;\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\";\n pt.fp = funcParam;\n\n if (_relExp.test(end) || hasRandom) {\n pt.e = 0;\n }\n\n this._pt = pt;\n return pt;\n },\n _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam) {\n _isFunction(end) && (end = end(index || 0, target, targets));\n var currentValue = target[prop],\n parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\n setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\n pt;\n\n if (_isString(end)) {\n if (~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (end.charAt(1) === \"=\") {\n pt = parseFloat(parsedStart) + parseFloat(end.substr(2)) * (end.charAt(0) === \"-\" ? -1 : 1) + (getUnit(parsedStart) || 0);\n\n if (pt || pt === 0) {\n end = pt;\n }\n }\n }\n\n if (parsedStart !== end) {\n if (!isNaN(parsedStart * end) && end !== \"\") {\n pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\n funcParam && (pt.fp = funcParam);\n modifier && pt.modifier(modifier, this, target);\n return this._pt = pt;\n }\n\n !currentValue && !(prop in target) && _missingPlugin(prop, end);\n return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\n }\n },\n _processVars = function _processVars(vars, index, target, targets, tween) {\n _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\n\n if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\n return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\n }\n\n var copy = {},\n p;\n\n for (p in vars) {\n copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\n }\n\n return copy;\n },\n _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\n var plugin, pt, ptLookup, i;\n\n if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n if (tween !== _quickTween) {\n ptLookup = tween._ptLookup[tween._targets.indexOf(target)];\n i = plugin._props.length;\n\n while (i--) {\n ptLookup[plugin._props[i]] = pt;\n }\n }\n }\n\n return plugin;\n },\n _overwritingTween,\n _initTween = function _initTween(tween, time) {\n var vars = tween.vars,\n ease = vars.ease,\n startAt = vars.startAt,\n immediateRender = vars.immediateRender,\n lazy = vars.lazy,\n onUpdate = vars.onUpdate,\n onUpdateParams = vars.onUpdateParams,\n callbackScope = vars.callbackScope,\n runBackwards = vars.runBackwards,\n yoyoEase = vars.yoyoEase,\n keyframes = vars.keyframes,\n autoRevert = vars.autoRevert,\n dur = tween._dur,\n prevStartAt = tween._startAt,\n targets = tween._targets,\n parent = tween.parent,\n fullTargets = parent && parent.data === \"nested\" ? parent.parent._targets : targets,\n autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\n tl = tween.timeline,\n cleanVars,\n i,\n p,\n pt,\n target,\n hasPriority,\n gsData,\n harness,\n plugin,\n ptLookup,\n index,\n harnessVars,\n overwritten;\n tl && (!keyframes || !ease) && (ease = \"none\");\n tween._ease = _parseEase(ease, _defaults.ease);\n tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\n\n if (yoyoEase && tween._yoyo && !tween._repeat) {\n yoyoEase = tween._yEase;\n tween._yEase = tween._ease;\n tween._ease = yoyoEase;\n }\n\n tween._from = !tl && !!vars.runBackwards;\n\n if (!tl || keyframes && !vars.stagger) {\n harness = targets[0] ? _getCache(targets[0]).harness : 0;\n harnessVars = harness && vars[harness.prop];\n cleanVars = _copyExcluding(vars, _reservedProps);\n prevStartAt && _removeFromParent(prevStartAt.render(-1, true));\n\n if (startAt) {\n _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\n data: \"isStart\",\n overwrite: false,\n parent: parent,\n immediateRender: true,\n lazy: _isNotFalse(lazy),\n startAt: null,\n delay: 0,\n onUpdate: onUpdate,\n onUpdateParams: onUpdateParams,\n callbackScope: callbackScope,\n stagger: 0\n }, startAt)));\n\n time < 0 && !immediateRender && !autoRevert && tween._startAt.render(-1, true);\n\n if (immediateRender) {\n time > 0 && !autoRevert && (tween._startAt = 0);\n\n if (dur && time <= 0) {\n time && (tween._zTime = time);\n return;\n }\n } else if (autoRevert === false) {\n tween._startAt = 0;\n }\n } else if (runBackwards && dur) {\n if (prevStartAt) {\n !autoRevert && (tween._startAt = 0);\n } else {\n time && (immediateRender = false);\n p = _setDefaults({\n overwrite: false,\n data: \"isFromStart\",\n lazy: immediateRender && _isNotFalse(lazy),\n immediateRender: immediateRender,\n stagger: 0,\n parent: parent\n }, cleanVars);\n harnessVars && (p[harness.prop] = harnessVars);\n\n _removeFromParent(tween._startAt = Tween.set(targets, p));\n\n time < 0 && tween._startAt.render(-1, true);\n tween._zTime = time;\n\n if (!immediateRender) {\n _initTween(tween._startAt, _tinyNum);\n } else if (!time) {\n return;\n }\n }\n }\n\n tween._pt = 0;\n lazy = dur && _isNotFalse(lazy) || lazy && !dur;\n\n for (i = 0; i < targets.length; i++) {\n target = targets[i];\n gsData = target._gsap || _harness(targets)[i]._gsap;\n tween._ptLookup[i] = ptLookup = {};\n _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender();\n index = fullTargets === targets ? i : fullTargets.indexOf(target);\n\n if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n plugin._props.forEach(function (name) {\n ptLookup[name] = pt;\n });\n\n plugin.priority && (hasPriority = 1);\n }\n\n if (!harness || harnessVars) {\n for (p in cleanVars) {\n if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\n plugin.priority && (hasPriority = 1);\n } else {\n ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\n }\n }\n }\n\n tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\n\n if (autoOverwrite && tween._pt) {\n _overwritingTween = tween;\n\n _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time));\n\n overwritten = !tween.parent;\n _overwritingTween = 0;\n }\n\n tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\n }\n\n hasPriority && _sortPropTweensByPriority(tween);\n tween._onInit && tween._onInit(tween);\n }\n\n tween._onUpdate = onUpdate;\n tween._initted = (!tween._op || tween._pt) && !overwritten;\n keyframes && time <= 0 && tl.render(_bigNum, true, true);\n },\n _addAliasesToVars = function _addAliasesToVars(targets, vars) {\n var harness = targets[0] ? _getCache(targets[0]).harness : 0,\n propertyAliases = harness && harness.aliases,\n copy,\n p,\n i,\n aliases;\n\n if (!propertyAliases) {\n return vars;\n }\n\n copy = _merge({}, vars);\n\n for (p in propertyAliases) {\n if (p in copy) {\n aliases = propertyAliases[p].split(\",\");\n i = aliases.length;\n\n while (i--) {\n copy[aliases[i]] = copy[p];\n }\n }\n }\n\n return copy;\n },\n _parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\n var ease = obj.ease || easeEach || \"power1.inOut\",\n p,\n a;\n\n if (_isArray(obj)) {\n a = allProps[prop] || (allProps[prop] = []);\n obj.forEach(function (value, i) {\n return a.push({\n t: i / (obj.length - 1) * 100,\n v: value,\n e: ease\n });\n });\n } else {\n for (p in obj) {\n a = allProps[p] || (allProps[p] = []);\n p === \"ease\" || a.push({\n t: parseFloat(prop),\n v: obj[p],\n e: ease\n });\n }\n }\n },\n _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\n return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\n },\n _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase\",\n _staggerPropsToSkip = {};\n\n _forEachName(_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\", function (name) {\n return _staggerPropsToSkip[name] = 1;\n });\n\n var Tween = function (_Animation2) {\n _inheritsLoose(Tween, _Animation2);\n\n function Tween(targets, vars, position, skipInherit) {\n var _this3;\n\n if (typeof vars === \"number\") {\n position.duration = vars;\n vars = position;\n position = null;\n }\n\n _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\n var _this3$vars = _this3.vars,\n duration = _this3$vars.duration,\n delay = _this3$vars.delay,\n immediateRender = _this3$vars.immediateRender,\n stagger = _this3$vars.stagger,\n overwrite = _this3$vars.overwrite,\n keyframes = _this3$vars.keyframes,\n defaults = _this3$vars.defaults,\n scrollTrigger = _this3$vars.scrollTrigger,\n yoyoEase = _this3$vars.yoyoEase,\n parent = vars.parent || _globalTimeline,\n parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\n tl,\n i,\n copy,\n l,\n p,\n curTarget,\n staggerFunc,\n staggerVarsToMerge;\n _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://greensock.com\", !_config.nullTargetWarn) || [];\n _this3._ptLookup = [];\n _this3._overwrite = overwrite;\n\n if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n vars = _this3.vars;\n tl = _this3.timeline = new Timeline({\n data: \"nested\",\n defaults: defaults || {}\n });\n tl.kill();\n tl.parent = tl._dp = _assertThisInitialized(_this3);\n tl._start = 0;\n\n if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n l = parsedTargets.length;\n staggerFunc = stagger && distribute(stagger);\n\n if (_isObject(stagger)) {\n for (p in stagger) {\n if (~_staggerTweenProps.indexOf(p)) {\n staggerVarsToMerge || (staggerVarsToMerge = {});\n staggerVarsToMerge[p] = stagger[p];\n }\n }\n }\n\n for (i = 0; i < l; i++) {\n copy = _copyExcluding(vars, _staggerPropsToSkip);\n copy.stagger = 0;\n yoyoEase && (copy.yoyoEase = yoyoEase);\n staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\n curTarget = parsedTargets[i];\n copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\n copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\n\n if (!stagger && l === 1 && copy.delay) {\n _this3._delay = delay = copy.delay;\n _this3._start += delay;\n copy.delay = 0;\n }\n\n tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\n tl._ease = _easeMap.none;\n }\n\n tl.duration() ? duration = delay = 0 : _this3.timeline = 0;\n } else if (keyframes) {\n _inheritDefaults(_setDefaults(tl.vars.defaults, {\n ease: \"none\"\n }));\n\n tl._ease = _parseEase(keyframes.ease || vars.ease || \"none\");\n var time = 0,\n a,\n kf,\n v;\n\n if (_isArray(keyframes)) {\n keyframes.forEach(function (frame) {\n return tl.to(parsedTargets, frame, \">\");\n });\n } else {\n copy = {};\n\n for (p in keyframes) {\n p === \"ease\" || p === \"easeEach\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\n }\n\n for (p in copy) {\n a = copy[p].sort(function (a, b) {\n return a.t - b.t;\n });\n time = 0;\n\n for (i = 0; i < a.length; i++) {\n kf = a[i];\n v = {\n ease: kf.e,\n duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\n };\n v[p] = kf.v;\n tl.to(parsedTargets, v, time);\n time += v.duration;\n }\n }\n\n tl.duration() < duration && tl.to({}, {\n duration: duration - tl.duration()\n });\n }\n }\n\n duration || _this3.duration(duration = tl.duration());\n } else {\n _this3.timeline = 0;\n }\n\n if (overwrite === true && !_suppressOverwrites) {\n _overwritingTween = _assertThisInitialized(_this3);\n\n _globalTimeline.killTweensOf(parsedTargets);\n\n _overwritingTween = 0;\n }\n\n _addToTimeline(parent, _assertThisInitialized(_this3), position);\n\n vars.reversed && _this3.reverse();\n vars.paused && _this3.paused(true);\n\n if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\n _this3._tTime = -_tinyNum;\n\n _this3.render(Math.max(0, -delay));\n }\n\n scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\n return _this3;\n }\n\n var _proto3 = Tween.prototype;\n\n _proto3.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._tDur,\n dur = this._dur,\n tTime = totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime,\n time,\n pt,\n iteration,\n cycleDuration,\n prevIteration,\n isYoyo,\n ratio,\n timeline,\n yoyoEase;\n\n if (!dur) {\n _renderZeroDurationTween(this, totalTime, suppressEvents, force);\n } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== totalTime < 0) {\n time = tTime;\n timeline = this.timeline;\n\n if (this._repeat) {\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && totalTime < 0) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration);\n\n if (tTime === tDur) {\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n isYoyo = this._yoyo && iteration & 1;\n\n if (isYoyo) {\n yoyoEase = this._yEase;\n time = dur - time;\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n\n if (time === prevTime && !force && this._initted) {\n return this;\n }\n\n if (iteration !== prevIteration) {\n timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo);\n\n if (this.vars.repeatRefresh && !isYoyo && !this._lock) {\n this._lock = force = 1;\n this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\n }\n }\n }\n\n if (!this._initted) {\n if (_attemptInitTween(this, totalTime < 0 ? totalTime : time, force, suppressEvents)) {\n this._tTime = 0;\n return this;\n }\n\n if (dur !== this._dur) {\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n\n if (!this._act && this._ts) {\n this._act = 1;\n this._lazy = 0;\n }\n\n this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\n\n if (this._from) {\n this.ratio = ratio = 1 - ratio;\n }\n\n if (time && !prevTime && !suppressEvents) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n return this;\n }\n }\n\n pt = this._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\n\n if (this._onUpdate && !suppressEvents) {\n totalTime < 0 && this._startAt && this._startAt.render(totalTime, true, force);\n\n _callback(this, \"onUpdate\");\n }\n\n this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n\n if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\n totalTime < 0 && this._startAt && !this._onUpdate && this._startAt.render(totalTime, true, true);\n (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);\n\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime)) {\n _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto3.targets = function targets() {\n return this._targets;\n };\n\n _proto3.invalidate = function invalidate() {\n this._pt = this._op = this._startAt = this._onUpdate = this._lazy = this.ratio = 0;\n this._ptLookup = [];\n this.timeline && this.timeline.invalidate();\n return _Animation2.prototype.invalidate.call(this);\n };\n\n _proto3.kill = function kill(targets, vars) {\n if (vars === void 0) {\n vars = \"all\";\n }\n\n if (!targets && (!vars || vars === \"all\")) {\n this._lazy = this._pt = 0;\n return this.parent ? _interrupt(this) : this;\n }\n\n if (this.timeline) {\n var tDur = this.timeline.totalDuration();\n this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this);\n this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1);\n return this;\n }\n\n var parsedTargets = this._targets,\n killingTargets = targets ? toArray(targets) : parsedTargets,\n propTweenLookup = this._ptLookup,\n firstPT = this._pt,\n overwrittenProps,\n curLookup,\n curOverwriteProps,\n props,\n p,\n pt,\n i;\n\n if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\n vars === \"all\" && (this._pt = 0);\n return _interrupt(this);\n }\n\n overwrittenProps = this._op = this._op || [];\n\n if (vars !== \"all\") {\n if (_isString(vars)) {\n p = {};\n\n _forEachName(vars, function (name) {\n return p[name] = 1;\n });\n\n vars = p;\n }\n\n vars = _addAliasesToVars(parsedTargets, vars);\n }\n\n i = parsedTargets.length;\n\n while (i--) {\n if (~killingTargets.indexOf(parsedTargets[i])) {\n curLookup = propTweenLookup[i];\n\n if (vars === \"all\") {\n overwrittenProps[i] = vars;\n props = curLookup;\n curOverwriteProps = {};\n } else {\n curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\n props = vars;\n }\n\n for (p in props) {\n pt = curLookup && curLookup[p];\n\n if (pt) {\n if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\n _removeLinkedListItem(this, pt, \"_pt\");\n }\n\n delete curLookup[p];\n }\n\n if (curOverwriteProps !== \"all\") {\n curOverwriteProps[p] = 1;\n }\n }\n }\n }\n\n this._initted && !this._pt && firstPT && _interrupt(this);\n return this;\n };\n\n Tween.to = function to(targets, vars) {\n return new Tween(targets, vars, arguments[2]);\n };\n\n Tween.from = function from(targets, vars) {\n return _createTweenType(1, arguments);\n };\n\n Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\n return new Tween(callback, 0, {\n immediateRender: false,\n lazy: false,\n overwrite: false,\n delay: delay,\n onComplete: callback,\n onReverseComplete: callback,\n onCompleteParams: params,\n onReverseCompleteParams: params,\n callbackScope: scope\n });\n };\n\n Tween.fromTo = function fromTo(targets, fromVars, toVars) {\n return _createTweenType(2, arguments);\n };\n\n Tween.set = function set(targets, vars) {\n vars.duration = 0;\n vars.repeatDelay || (vars.repeat = 0);\n return new Tween(targets, vars);\n };\n\n Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n return _globalTimeline.killTweensOf(targets, props, onlyActive);\n };\n\n return Tween;\n }(Animation);\n\n _setDefaults(Tween.prototype, {\n _targets: [],\n _lazy: 0,\n _startAt: 0,\n _op: 0,\n _onInit: 0\n });\n\n _forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\n Tween[name] = function () {\n var tl = new Timeline(),\n params = _slice.call(arguments, 0);\n\n params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\n return tl[name].apply(tl, params);\n };\n });\n\n var _setterPlain = function _setterPlain(target, property, value) {\n return target[property] = value;\n },\n _setterFunc = function _setterFunc(target, property, value) {\n return target[property](value);\n },\n _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\n return target[property](data.fp, value);\n },\n _setterAttribute = function _setterAttribute(target, property, value) {\n return target.setAttribute(property, value);\n },\n _getSetter = function _getSetter(target, property) {\n return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\n },\n _renderPlain = function _renderPlain(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\n },\n _renderBoolean = function _renderBoolean(ratio, data) {\n return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\n },\n _renderComplexString = function _renderComplexString(ratio, data) {\n var pt = data._pt,\n s = \"\";\n\n if (!ratio && data.b) {\n s = data.b;\n } else if (ratio === 1 && data.e) {\n s = data.e;\n } else {\n while (pt) {\n s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s;\n pt = pt._next;\n }\n\n s += data.c;\n }\n\n data.set(data.t, data.p, s, data);\n },\n _renderPropTweens = function _renderPropTweens(ratio, data) {\n var pt = data._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n },\n _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\n var pt = this._pt,\n next;\n\n while (pt) {\n next = pt._next;\n pt.p === property && pt.modifier(modifier, tween, target);\n pt = next;\n }\n },\n _killPropTweensOf = function _killPropTweensOf(property) {\n var pt = this._pt,\n hasNonDependentRemaining,\n next;\n\n while (pt) {\n next = pt._next;\n\n if (pt.p === property && !pt.op || pt.op === property) {\n _removeLinkedListItem(this, pt, \"_pt\");\n } else if (!pt.dep) {\n hasNonDependentRemaining = 1;\n }\n\n pt = next;\n }\n\n return !hasNonDependentRemaining;\n },\n _setterWithModifier = function _setterWithModifier(target, property, value, data) {\n data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\n },\n _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\n var pt = parent._pt,\n next,\n pt2,\n first,\n last;\n\n while (pt) {\n next = pt._next;\n pt2 = first;\n\n while (pt2 && pt2.pr > pt.pr) {\n pt2 = pt2._next;\n }\n\n if (pt._prev = pt2 ? pt2._prev : last) {\n pt._prev._next = pt;\n } else {\n first = pt;\n }\n\n if (pt._next = pt2) {\n pt2._prev = pt;\n } else {\n last = pt;\n }\n\n pt = next;\n }\n\n parent._pt = first;\n };\n\n var PropTween = function () {\n function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\n this.t = target;\n this.s = start;\n this.c = change;\n this.p = prop;\n this.r = renderer || _renderPlain;\n this.d = data || this;\n this.set = setter || _setterPlain;\n this.pr = priority || 0;\n this._next = next;\n\n if (next) {\n next._prev = this;\n }\n }\n\n var _proto4 = PropTween.prototype;\n\n _proto4.modifier = function modifier(func, tween, target) {\n this.mSet = this.mSet || this.set;\n this.set = _setterWithModifier;\n this.m = func;\n this.mt = target;\n this.tween = tween;\n };\n\n return PropTween;\n }();\n\n _forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\n return _reservedProps[name] = 1;\n });\n\n _globals.TweenMax = _globals.TweenLite = Tween;\n _globals.TimelineLite = _globals.TimelineMax = Timeline;\n _globalTimeline = new Timeline({\n sortChildren: false,\n defaults: _defaults,\n autoRemoveChildren: true,\n id: \"root\",\n smoothChildTiming: true\n });\n _config.stringFilter = _colorStringFilter;\n var _gsap = {\n registerPlugin: function registerPlugin() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n args.forEach(function (config) {\n return _createPlugin(config);\n });\n },\n timeline: function timeline(vars) {\n return new Timeline(vars);\n },\n getTweensOf: function getTweensOf(targets, onlyActive) {\n return _globalTimeline.getTweensOf(targets, onlyActive);\n },\n getProperty: function getProperty(target, property, unit, uncache) {\n _isString(target) && (target = toArray(target)[0]);\n\n var getter = _getCache(target || {}).get,\n format = unit ? _passThrough : _numericIfPossible;\n\n unit === \"native\" && (unit = \"\");\n return !target ? target : !property ? function (property, unit, uncache) {\n return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n },\n quickSetter: function quickSetter(target, property, unit) {\n target = toArray(target);\n\n if (target.length > 1) {\n var setters = target.map(function (t) {\n return gsap.quickSetter(t, property, unit);\n }),\n l = setters.length;\n return function (value) {\n var i = l;\n\n while (i--) {\n setters[i](value);\n }\n };\n }\n\n target = target[0] || {};\n\n var Plugin = _plugins[property],\n cache = _getCache(target),\n p = cache.harness && (cache.harness.aliases || {})[property] || property,\n setter = Plugin ? function (value) {\n var p = new Plugin();\n _quickTween._pt = 0;\n p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\n p.render(1, p);\n _quickTween._pt && _renderPropTweens(1, _quickTween);\n } : cache.set(target, p);\n\n return Plugin ? setter : function (value) {\n return setter(target, p, unit ? value + unit : value, cache, 1);\n };\n },\n isTweening: function isTweening(targets) {\n return _globalTimeline.getTweensOf(targets, true).length > 0;\n },\n defaults: function defaults(value) {\n value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\n return _mergeDeep(_defaults, value || {});\n },\n config: function config(value) {\n return _mergeDeep(_config, value || {});\n },\n registerEffect: function registerEffect(_ref3) {\n var name = _ref3.name,\n effect = _ref3.effect,\n plugins = _ref3.plugins,\n defaults = _ref3.defaults,\n extendTimeline = _ref3.extendTimeline;\n (plugins || \"\").split(\",\").forEach(function (pluginName) {\n return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\n });\n\n _effects[name] = function (targets, vars, tl) {\n return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\n };\n\n if (extendTimeline) {\n Timeline.prototype[name] = function (targets, vars, position) {\n return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\n };\n }\n },\n registerEase: function registerEase(name, ease) {\n _easeMap[name] = _parseEase(ease);\n },\n parseEase: function parseEase(ease, defaultEase) {\n return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\n },\n getById: function getById(id) {\n return _globalTimeline.getById(id);\n },\n exportRoot: function exportRoot(vars, includeDelayedCalls) {\n if (vars === void 0) {\n vars = {};\n }\n\n var tl = new Timeline(vars),\n child,\n next;\n tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\n\n _globalTimeline.remove(tl);\n\n tl._dp = 0;\n tl._time = tl._tTime = _globalTimeline._time;\n child = _globalTimeline._first;\n\n while (child) {\n next = child._next;\n\n if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\n _addToTimeline(tl, child, child._start - child._delay);\n }\n\n child = next;\n }\n\n _addToTimeline(_globalTimeline, tl, 0);\n\n return tl;\n },\n utils: {\n wrap: wrap,\n wrapYoyo: wrapYoyo,\n distribute: distribute,\n random: random,\n snap: snap,\n normalize: normalize,\n getUnit: getUnit,\n clamp: clamp,\n splitColor: splitColor,\n toArray: toArray,\n selector: selector,\n mapRange: mapRange,\n pipe: pipe,\n unitize: unitize,\n interpolate: interpolate,\n shuffle: shuffle\n },\n install: _install,\n effects: _effects,\n ticker: _ticker,\n updateRoot: Timeline.updateRoot,\n plugins: _plugins,\n globalTimeline: _globalTimeline,\n core: {\n PropTween: PropTween,\n globals: _addGlobal,\n Tween: Tween,\n Timeline: Timeline,\n Animation: Animation,\n getCache: _getCache,\n _removeLinkedListItem: _removeLinkedListItem,\n suppressOverwrites: function suppressOverwrites(value) {\n return _suppressOverwrites = value;\n }\n }\n };\n\n _forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\n return _gsap[name] = Tween[name];\n });\n\n _ticker.add(Timeline.updateRoot);\n\n _quickTween = _gsap.to({}, {\n duration: 0\n });\n\n var _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\n var pt = plugin._pt;\n\n while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\n pt = pt._next;\n }\n\n return pt;\n },\n _addModifiers = function _addModifiers(tween, modifiers) {\n var targets = tween._targets,\n p,\n i,\n pt;\n\n for (p in modifiers) {\n i = targets.length;\n\n while (i--) {\n pt = tween._ptLookup[i][p];\n\n if (pt && (pt = pt.d)) {\n if (pt._pt) {\n pt = _getPluginPropTween(pt, p);\n }\n\n pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\n }\n }\n }\n },\n _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\n return {\n name: name,\n rawVars: 1,\n init: function init(target, vars, tween) {\n tween._onInit = function (tween) {\n var temp, p;\n\n if (_isString(vars)) {\n temp = {};\n\n _forEachName(vars, function (name) {\n return temp[name] = 1;\n });\n\n vars = temp;\n }\n\n if (modifier) {\n temp = {};\n\n for (p in vars) {\n temp[p] = modifier(vars[p]);\n }\n\n vars = temp;\n }\n\n _addModifiers(tween, vars);\n };\n }\n };\n };\n\n var gsap = _gsap.registerPlugin({\n name: \"attr\",\n init: function init(target, vars, tween, index, targets) {\n var p, pt;\n\n for (p in vars) {\n pt = this.add(target, \"setAttribute\", (target.getAttribute(p) || 0) + \"\", vars[p], index, targets, 0, 0, p);\n pt && (pt.op = p);\n\n this._props.push(p);\n }\n }\n }, {\n name: \"endArray\",\n init: function init(target, value) {\n var i = value.length;\n\n while (i--) {\n this.add(target, i, target[i] || 0, value[i]);\n }\n }\n }, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap;\n Tween.version = Timeline.version = gsap.version = \"3.9.1\";\n _coreReady = 1;\n _windowExists() && _wake();\n var Power0 = _easeMap.Power0,\n Power1 = _easeMap.Power1,\n Power2 = _easeMap.Power2,\n Power3 = _easeMap.Power3,\n Power4 = _easeMap.Power4,\n Linear = _easeMap.Linear,\n Quad = _easeMap.Quad,\n Cubic = _easeMap.Cubic,\n Quart = _easeMap.Quart,\n Quint = _easeMap.Quint,\n Strong = _easeMap.Strong,\n Elastic = _easeMap.Elastic,\n Back = _easeMap.Back,\n SteppedEase = _easeMap.SteppedEase,\n Bounce = _easeMap.Bounce,\n Sine = _easeMap.Sine,\n Expo = _easeMap.Expo,\n Circ = _easeMap.Circ;\n\n var _win$1,\n _doc$1,\n _docElement,\n _pluginInitted,\n _tempDiv,\n _tempDivStyler,\n _recentSetterPlugin,\n _windowExists$1 = function _windowExists() {\n return typeof window !== \"undefined\";\n },\n _transformProps = {},\n _RAD2DEG = 180 / Math.PI,\n _DEG2RAD = Math.PI / 180,\n _atan2 = Math.atan2,\n _bigNum$1 = 1e8,\n _capsExp = /([A-Z])/g,\n _horizontalExp = /(?:left|right|width|margin|padding|x)/i,\n _complexExp = /[\\s,\\(]\\S/,\n _propertyAliases = {\n autoAlpha: \"opacity,visibility\",\n scale: \"scaleX,scaleY\",\n alpha: \"opacity\"\n },\n _renderCSSProp = function _renderCSSProp(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n },\n _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\n return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n },\n _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\n return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\n },\n _renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\n var value = data.s + data.c * ratio;\n data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\n },\n _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\n return data.set(data.t, data.p, ratio ? data.e : data.b, data);\n },\n _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\n return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\n },\n _setterCSSStyle = function _setterCSSStyle(target, property, value) {\n return target.style[property] = value;\n },\n _setterCSSProp = function _setterCSSProp(target, property, value) {\n return target.style.setProperty(property, value);\n },\n _setterTransform = function _setterTransform(target, property, value) {\n return target._gsap[property] = value;\n },\n _setterScale = function _setterScale(target, property, value) {\n return target._gsap.scaleX = target._gsap.scaleY = value;\n },\n _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache.scaleX = cache.scaleY = value;\n cache.renderTransform(ratio, cache);\n },\n _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache[property] = value;\n cache.renderTransform(ratio, cache);\n },\n _transformProp = \"transform\",\n _transformOriginProp = _transformProp + \"Origin\",\n _supports3D,\n _createElement = function _createElement(type, ns) {\n var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc$1.createElement(type);\n return e.style ? e : _doc$1.createElement(type);\n },\n _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\n var cs = getComputedStyle(target);\n return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\";\n },\n _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\n _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\n var e = element || _tempDiv,\n s = e.style,\n i = 5;\n\n if (property in s && !preferPrefix) {\n return property;\n }\n\n property = property.charAt(0).toUpperCase() + property.substr(1);\n\n while (i-- && !(_prefixes[i] + property in s)) {}\n\n return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\n },\n _initCore = function _initCore() {\n if (_windowExists$1() && window.document) {\n _win$1 = window;\n _doc$1 = _win$1.document;\n _docElement = _doc$1.documentElement;\n _tempDiv = _createElement(\"div\") || {\n style: {}\n };\n _tempDivStyler = _createElement(\"div\");\n _transformProp = _checkPropPrefix(_transformProp);\n _transformOriginProp = _transformProp + \"Origin\";\n _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\";\n _supports3D = !!_checkPropPrefix(\"perspective\");\n _pluginInitted = 1;\n }\n },\n _getBBoxHack = function _getBBoxHack(swapIfPossible) {\n var svg = _createElement(\"svg\", this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\n oldParent = this.parentNode,\n oldSibling = this.nextSibling,\n oldCSS = this.style.cssText,\n bbox;\n\n _docElement.appendChild(svg);\n\n svg.appendChild(this);\n this.style.display = \"block\";\n\n if (swapIfPossible) {\n try {\n bbox = this.getBBox();\n this._gsapBBox = this.getBBox;\n this.getBBox = _getBBoxHack;\n } catch (e) {}\n } else if (this._gsapBBox) {\n bbox = this._gsapBBox();\n }\n\n if (oldParent) {\n if (oldSibling) {\n oldParent.insertBefore(this, oldSibling);\n } else {\n oldParent.appendChild(this);\n }\n }\n\n _docElement.removeChild(svg);\n\n this.style.cssText = oldCSS;\n return bbox;\n },\n _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\n var i = attributesArray.length;\n\n while (i--) {\n if (target.hasAttribute(attributesArray[i])) {\n return target.getAttribute(attributesArray[i]);\n }\n }\n },\n _getBBox = function _getBBox(target) {\n var bounds;\n\n try {\n bounds = target.getBBox();\n } catch (error) {\n bounds = _getBBoxHack.call(target, true);\n }\n\n bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true));\n return bounds && !bounds.width && !bounds.x && !bounds.y ? {\n x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\n y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\n width: 0,\n height: 0\n } : bounds;\n },\n _isSVG = function _isSVG(e) {\n return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n },\n _removeProperty = function _removeProperty(target, property) {\n if (property) {\n var style = target.style;\n\n if (property in _transformProps && property !== _transformOriginProp) {\n property = _transformProp;\n }\n\n if (style.removeProperty) {\n if (property.substr(0, 2) === \"ms\" || property.substr(0, 6) === \"webkit\") {\n property = \"-\" + property;\n }\n\n style.removeProperty(property.replace(_capsExp, \"-$1\").toLowerCase());\n } else {\n style.removeAttribute(property);\n }\n }\n },\n _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\n var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\n plugin._pt = pt;\n pt.b = beginning;\n pt.e = end;\n\n plugin._props.push(property);\n\n return pt;\n },\n _nonConvertibleUnits = {\n deg: 1,\n rad: 1,\n turn: 1\n },\n _convertToUnit = function _convertToUnit(target, property, value, unit) {\n var curValue = parseFloat(value) || 0,\n curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\n style = _tempDiv.style,\n horizontal = _horizontalExp.test(property),\n isRootSVG = target.tagName.toLowerCase() === \"svg\",\n measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\n amount = 100,\n toPixels = unit === \"px\",\n toPercent = unit === \"%\",\n px,\n parent,\n cache,\n isSVG;\n\n if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\n return curValue;\n }\n\n curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\n isSVG = target.getCTM && _isSVG(target);\n\n if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\n px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\n return _round(toPercent ? curValue / px * amount : curValue / 100 * px);\n }\n\n style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\n parent = ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\n\n if (isSVG) {\n parent = (target.ownerSVGElement || {}).parentNode;\n }\n\n if (!parent || parent === _doc$1 || !parent.appendChild) {\n parent = _doc$1.body;\n }\n\n cache = parent._gsap;\n\n if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time) {\n return _round(curValue / cache.width * amount);\n } else {\n (toPercent || curUnit === \"%\") && (style.position = _getComputedProperty(target, \"position\"));\n parent === target && (style.position = \"static\");\n parent.appendChild(_tempDiv);\n px = _tempDiv[measureProperty];\n parent.removeChild(_tempDiv);\n style.position = \"absolute\";\n\n if (horizontal && toPercent) {\n cache = _getCache(parent);\n cache.time = _ticker.time;\n cache.width = parent[measureProperty];\n }\n }\n\n return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\n },\n _get = function _get(target, property, unit, uncache) {\n var value;\n _pluginInitted || _initCore();\n\n if (property in _propertyAliases && property !== \"transform\") {\n property = _propertyAliases[property];\n\n if (~property.indexOf(\",\")) {\n property = property.split(\",\")[0];\n }\n }\n\n if (_transformProps[property] && property !== \"transform\") {\n value = _parseTransform(target, uncache);\n value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\n } else {\n value = target.style[property];\n\n if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\n value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === \"opacity\" ? 1 : 0);\n }\n }\n\n return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\n },\n _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\n if (!start || start === \"none\") {\n var p = _checkPropPrefix(prop, target, 1),\n s = p && _getComputedProperty(target, p, 1);\n\n if (s && s !== start) {\n prop = p;\n start = s;\n } else if (prop === \"borderColor\") {\n start = _getComputedProperty(target, \"borderTopColor\");\n }\n }\n\n var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),\n index = 0,\n matchIndex = 0,\n a,\n result,\n startValues,\n startNum,\n color,\n startValue,\n endValue,\n endNum,\n chunk,\n endUnit,\n startUnit,\n relative,\n endValues;\n pt.b = start;\n pt.e = end;\n start += \"\";\n end += \"\";\n\n if (end === \"auto\") {\n target.style[prop] = end;\n end = _getComputedProperty(target, prop) || end;\n target.style[prop] = start;\n }\n\n a = [start, end];\n\n _colorStringFilter(a);\n\n start = a[0];\n end = a[1];\n startValues = start.match(_numWithUnitExp) || [];\n endValues = end.match(_numWithUnitExp) || [];\n\n if (endValues.length) {\n while (result = _numWithUnitExp.exec(end)) {\n endValue = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\n color = 1;\n }\n\n if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\n startNum = parseFloat(startValue) || 0;\n startUnit = startValue.substr((startNum + \"\").length);\n relative = endValue.charAt(1) === \"=\" ? +(endValue.charAt(0) + \"1\") : 0;\n\n if (relative) {\n endValue = endValue.substr(2);\n }\n\n endNum = parseFloat(endValue);\n endUnit = endValue.substr((endNum + \"\").length);\n index = _numWithUnitExp.lastIndex - endUnit.length;\n\n if (!endUnit) {\n endUnit = endUnit || _config.units[prop] || startUnit;\n\n if (index === end.length) {\n end += endUnit;\n pt.e += endUnit;\n }\n }\n\n if (startUnit !== endUnit) {\n startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\n }\n\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n s: startNum,\n c: relative ? relative * endNum : endNum - startNum,\n m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\n };\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\";\n } else {\n pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\n }\n\n _relExp.test(end) && (pt.e = 0);\n this._pt = pt;\n return pt;\n },\n _keywordToPercent = {\n top: \"0%\",\n bottom: \"100%\",\n left: \"0%\",\n right: \"100%\",\n center: \"50%\"\n },\n _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\n var split = value.split(\" \"),\n x = split[0],\n y = split[1] || \"50%\";\n\n if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\n value = x;\n x = y;\n y = value;\n }\n\n split[0] = _keywordToPercent[x] || x;\n split[1] = _keywordToPercent[y] || y;\n return split.join(\" \");\n },\n _renderClearProps = function _renderClearProps(ratio, data) {\n if (data.tween && data.tween._time === data.tween._dur) {\n var target = data.t,\n style = target.style,\n props = data.u,\n cache = target._gsap,\n prop,\n clearTransforms,\n i;\n\n if (props === \"all\" || props === true) {\n style.cssText = \"\";\n clearTransforms = 1;\n } else {\n props = props.split(\",\");\n i = props.length;\n\n while (--i > -1) {\n prop = props[i];\n\n if (_transformProps[prop]) {\n clearTransforms = 1;\n prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\n }\n\n _removeProperty(target, prop);\n }\n }\n\n if (clearTransforms) {\n _removeProperty(target, _transformProp);\n\n if (cache) {\n cache.svg && target.removeAttribute(\"transform\");\n\n _parseTransform(target, 1);\n\n cache.uncache = 1;\n }\n }\n }\n },\n _specialProps = {\n clearProps: function clearProps(plugin, target, property, endValue, tween) {\n if (tween.data !== \"isFromStart\") {\n var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\n pt.u = endValue;\n pt.pr = -10;\n pt.tween = tween;\n\n plugin._props.push(property);\n\n return 1;\n }\n }\n },\n _identity2DMatrix = [1, 0, 0, 1, 0, 0],\n _rotationalProperties = {},\n _isNullTransform = function _isNullTransform(value) {\n return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\n },\n _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\n var matrixString = _getComputedProperty(target, _transformProp);\n\n return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);\n },\n _getMatrix = function _getMatrix(target, force2D) {\n var cache = target._gsap || _getCache(target),\n style = target.style,\n matrix = _getComputedTransformMatrixAsArray(target),\n parent,\n nextSibling,\n temp,\n addedToDOM;\n\n if (cache.svg && target.getAttribute(\"transform\")) {\n temp = target.transform.baseVal.consolidate().matrix;\n matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\n return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\n } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\n temp = style.display;\n style.display = \"block\";\n parent = target.parentNode;\n\n if (!parent || !target.offsetParent) {\n addedToDOM = 1;\n nextSibling = target.nextSibling;\n\n _docElement.appendChild(target);\n }\n\n matrix = _getComputedTransformMatrixAsArray(target);\n temp ? style.display = temp : _removeProperty(target, \"display\");\n\n if (addedToDOM) {\n nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\n }\n }\n\n return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\n },\n _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\n var cache = target._gsap,\n matrix = matrixArray || _getMatrix(target, true),\n xOriginOld = cache.xOrigin || 0,\n yOriginOld = cache.yOrigin || 0,\n xOffsetOld = cache.xOffset || 0,\n yOffsetOld = cache.yOffset || 0,\n a = matrix[0],\n b = matrix[1],\n c = matrix[2],\n d = matrix[3],\n tx = matrix[4],\n ty = matrix[5],\n originSplit = origin.split(\" \"),\n xOrigin = parseFloat(originSplit[0]) || 0,\n yOrigin = parseFloat(originSplit[1]) || 0,\n bounds,\n determinant,\n x,\n y;\n\n if (!originIsAbsolute) {\n bounds = _getBBox(target);\n xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\n yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin);\n } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\n x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\n y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\n xOrigin = x;\n yOrigin = y;\n }\n\n if (smooth || smooth !== false && cache.smooth) {\n tx = xOrigin - xOriginOld;\n ty = yOrigin - yOriginOld;\n cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\n cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\n } else {\n cache.xOffset = cache.yOffset = 0;\n }\n\n cache.xOrigin = xOrigin;\n cache.yOrigin = yOrigin;\n cache.smooth = !!smooth;\n cache.origin = origin;\n cache.originIsAbsolute = !!originIsAbsolute;\n target.style[_transformOriginProp] = \"0px 0px\";\n\n if (pluginToAddPropTweensTo) {\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\n }\n\n target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\n },\n _parseTransform = function _parseTransform(target, uncache) {\n var cache = target._gsap || new GSCache(target);\n\n if (\"x\" in cache && !uncache && !cache.uncache) {\n return cache;\n }\n\n var style = target.style,\n invertedScaleX = cache.scaleX < 0,\n px = \"px\",\n deg = \"deg\",\n origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\n x,\n y,\n z,\n scaleX,\n scaleY,\n rotation,\n rotationX,\n rotationY,\n skewX,\n skewY,\n perspective,\n xOrigin,\n yOrigin,\n matrix,\n angle,\n cos,\n sin,\n a,\n b,\n c,\n d,\n a12,\n a22,\n t1,\n t2,\n t3,\n a13,\n a23,\n a33,\n a42,\n a43,\n a32;\n x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\n scaleX = scaleY = 1;\n cache.svg = !!(target.getCTM && _isSVG(target));\n matrix = _getMatrix(target, cache.svg);\n\n if (cache.svg) {\n t1 = (!cache.uncache || origin === \"0px 0px\") && !uncache && target.getAttribute(\"data-svg-origin\");\n\n _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\n }\n\n xOrigin = cache.xOrigin || 0;\n yOrigin = cache.yOrigin || 0;\n\n if (matrix !== _identity2DMatrix) {\n a = matrix[0];\n b = matrix[1];\n c = matrix[2];\n d = matrix[3];\n x = a12 = matrix[4];\n y = a22 = matrix[5];\n\n if (matrix.length === 6) {\n scaleX = Math.sqrt(a * a + b * b);\n scaleY = Math.sqrt(d * d + c * c);\n rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0;\n skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\n skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\n\n if (cache.svg) {\n x -= xOrigin - (xOrigin * a + yOrigin * c);\n y -= yOrigin - (xOrigin * b + yOrigin * d);\n }\n } else {\n a32 = matrix[6];\n a42 = matrix[7];\n a13 = matrix[8];\n a23 = matrix[9];\n a33 = matrix[10];\n a43 = matrix[11];\n x = matrix[12];\n y = matrix[13];\n z = matrix[14];\n angle = _atan2(a32, a33);\n rotationX = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a12 * cos + a13 * sin;\n t2 = a22 * cos + a23 * sin;\n t3 = a32 * cos + a33 * sin;\n a13 = a12 * -sin + a13 * cos;\n a23 = a22 * -sin + a23 * cos;\n a33 = a32 * -sin + a33 * cos;\n a43 = a42 * -sin + a43 * cos;\n a12 = t1;\n a22 = t2;\n a32 = t3;\n }\n\n angle = _atan2(-c, a33);\n rotationY = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a * cos - a13 * sin;\n t2 = b * cos - a23 * sin;\n t3 = c * cos - a33 * sin;\n a43 = d * sin + a43 * cos;\n a = t1;\n b = t2;\n c = t3;\n }\n\n angle = _atan2(b, a);\n rotation = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(angle);\n sin = Math.sin(angle);\n t1 = a * cos + b * sin;\n t2 = a12 * cos + a22 * sin;\n b = b * cos - a * sin;\n a22 = a22 * cos - a12 * sin;\n a = t1;\n a12 = t2;\n }\n\n if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\n rotationX = rotation = 0;\n rotationY = 180 - rotationY;\n }\n\n scaleX = _round(Math.sqrt(a * a + b * b + c * c));\n scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));\n angle = _atan2(a12, a22);\n skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\n perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\n }\n\n if (cache.svg) {\n t1 = target.getAttribute(\"transform\");\n cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\n t1 && target.setAttribute(\"transform\", t1);\n }\n }\n\n if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n if (invertedScaleX) {\n scaleX *= -1;\n skewX += rotation <= 0 ? 180 : -180;\n rotation += rotation <= 0 ? 180 : -180;\n } else {\n scaleY *= -1;\n skewX += skewX <= 0 ? 180 : -180;\n }\n }\n\n cache.x = x - ((cache.xPercent = x && (cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\n cache.y = y - ((cache.yPercent = y && (cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\n cache.z = z + px;\n cache.scaleX = _round(scaleX);\n cache.scaleY = _round(scaleY);\n cache.rotation = _round(rotation) + deg;\n cache.rotationX = _round(rotationX) + deg;\n cache.rotationY = _round(rotationY) + deg;\n cache.skewX = skewX + deg;\n cache.skewY = skewY + deg;\n cache.transformPerspective = perspective + px;\n\n if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || 0) {\n style[_transformOriginProp] = _firstTwoOnly(origin);\n }\n\n cache.xOffset = cache.yOffset = 0;\n cache.force3D = _config.force3D;\n cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\n cache.uncache = 0;\n return cache;\n },\n _firstTwoOnly = function _firstTwoOnly(value) {\n return (value = value.split(\" \"))[0] + \" \" + value[1];\n },\n _addPxTranslate = function _addPxTranslate(target, start, value) {\n var unit = getUnit(start);\n return _round(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\n },\n _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\n cache.z = \"0px\";\n cache.rotationY = cache.rotationX = \"0deg\";\n cache.force3D = 0;\n\n _renderCSSTransforms(ratio, cache);\n },\n _zeroDeg = \"0deg\",\n _zeroPx = \"0px\",\n _endParenthesis = \") \",\n _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\n var _ref = cache || this,\n xPercent = _ref.xPercent,\n yPercent = _ref.yPercent,\n x = _ref.x,\n y = _ref.y,\n z = _ref.z,\n rotation = _ref.rotation,\n rotationY = _ref.rotationY,\n rotationX = _ref.rotationX,\n skewX = _ref.skewX,\n skewY = _ref.skewY,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n transformPerspective = _ref.transformPerspective,\n force3D = _ref.force3D,\n target = _ref.target,\n zOrigin = _ref.zOrigin,\n transforms = \"\",\n use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true;\n\n if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\n var angle = parseFloat(rotationY) * _DEG2RAD,\n a13 = Math.sin(angle),\n a33 = Math.cos(angle),\n cos;\n\n angle = parseFloat(rotationX) * _DEG2RAD;\n cos = Math.cos(angle);\n x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\n y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\n z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\n }\n\n if (transformPerspective !== _zeroPx) {\n transforms += \"perspective(\" + transformPerspective + _endParenthesis;\n }\n\n if (xPercent || yPercent) {\n transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\n }\n\n if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\n transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\n }\n\n if (rotation !== _zeroDeg) {\n transforms += \"rotate(\" + rotation + _endParenthesis;\n }\n\n if (rotationY !== _zeroDeg) {\n transforms += \"rotateY(\" + rotationY + _endParenthesis;\n }\n\n if (rotationX !== _zeroDeg) {\n transforms += \"rotateX(\" + rotationX + _endParenthesis;\n }\n\n if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\n transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\n }\n\n if (scaleX !== 1 || scaleY !== 1) {\n transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\n }\n\n target.style[_transformProp] = transforms || \"translate(0, 0)\";\n },\n _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\n var _ref2 = cache || this,\n xPercent = _ref2.xPercent,\n yPercent = _ref2.yPercent,\n x = _ref2.x,\n y = _ref2.y,\n rotation = _ref2.rotation,\n skewX = _ref2.skewX,\n skewY = _ref2.skewY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n target = _ref2.target,\n xOrigin = _ref2.xOrigin,\n yOrigin = _ref2.yOrigin,\n xOffset = _ref2.xOffset,\n yOffset = _ref2.yOffset,\n forceCSS = _ref2.forceCSS,\n tx = parseFloat(x),\n ty = parseFloat(y),\n a11,\n a21,\n a12,\n a22,\n temp;\n\n rotation = parseFloat(rotation);\n skewX = parseFloat(skewX);\n skewY = parseFloat(skewY);\n\n if (skewY) {\n skewY = parseFloat(skewY);\n skewX += skewY;\n rotation += skewY;\n }\n\n if (rotation || skewX) {\n rotation *= _DEG2RAD;\n skewX *= _DEG2RAD;\n a11 = Math.cos(rotation) * scaleX;\n a21 = Math.sin(rotation) * scaleX;\n a12 = Math.sin(rotation - skewX) * -scaleY;\n a22 = Math.cos(rotation - skewX) * scaleY;\n\n if (skewX) {\n skewY *= _DEG2RAD;\n temp = Math.tan(skewX - skewY);\n temp = Math.sqrt(1 + temp * temp);\n a12 *= temp;\n a22 *= temp;\n\n if (skewY) {\n temp = Math.tan(skewY);\n temp = Math.sqrt(1 + temp * temp);\n a11 *= temp;\n a21 *= temp;\n }\n }\n\n a11 = _round(a11);\n a21 = _round(a21);\n a12 = _round(a12);\n a22 = _round(a22);\n } else {\n a11 = scaleX;\n a22 = scaleY;\n a21 = a12 = 0;\n }\n\n if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\n tx = _convertToUnit(target, \"x\", x, \"px\");\n ty = _convertToUnit(target, \"y\", y, \"px\");\n }\n\n if (xOrigin || yOrigin || xOffset || yOffset) {\n tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\n ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\n }\n\n if (xPercent || yPercent) {\n temp = target.getBBox();\n tx = _round(tx + xPercent / 100 * temp.width);\n ty = _round(ty + yPercent / 100 * temp.height);\n }\n\n temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\n target.setAttribute(\"transform\", temp);\n forceCSS && (target.style[_transformProp] = temp);\n },\n _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, relative) {\n var cap = 360,\n isString = _isString(endValue),\n endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\n change = relative ? endNum * relative : endNum - startNum,\n finalValue = startNum + change + \"deg\",\n direction,\n pt;\n\n if (isString) {\n direction = endValue.split(\"_\")[1];\n\n if (direction === \"short\") {\n change %= cap;\n\n if (change !== change % (cap / 2)) {\n change += change < 0 ? cap : -cap;\n }\n }\n\n if (direction === \"cw\" && change < 0) {\n change = (change + cap * _bigNum$1) % cap - ~~(change / cap) * cap;\n } else if (direction === \"ccw\" && change > 0) {\n change = (change - cap * _bigNum$1) % cap - ~~(change / cap) * cap;\n }\n }\n\n plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\n pt.e = finalValue;\n pt.u = \"deg\";\n\n plugin._props.push(property);\n\n return pt;\n },\n _assign = function _assign(target, source) {\n for (var p in source) {\n target[p] = source[p];\n }\n\n return target;\n },\n _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\n var startCache = _assign({}, target._gsap),\n exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\n style = target.style,\n endCache,\n p,\n startValue,\n endValue,\n startNum,\n endNum,\n startUnit,\n endUnit;\n\n if (startCache.svg) {\n startValue = target.getAttribute(\"transform\");\n target.setAttribute(\"transform\", \"\");\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n\n _removeProperty(target, _transformProp);\n\n target.setAttribute(\"transform\", startValue);\n } else {\n startValue = getComputedStyle(target)[_transformProp];\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n style[_transformProp] = startValue;\n }\n\n for (p in _transformProps) {\n startValue = startCache[p];\n endValue = endCache[p];\n\n if (startValue !== endValue && exclude.indexOf(p) < 0) {\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\n endNum = parseFloat(endValue);\n plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\n plugin._pt.u = endUnit || 0;\n\n plugin._props.push(p);\n }\n }\n\n _assign(endCache, startCache);\n };\n\n _forEachName(\"padding,margin,Width,Radius\", function (name, index) {\n var t = \"Top\",\n r = \"Right\",\n b = \"Bottom\",\n l = \"Left\",\n props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\n return index < 2 ? name + side : \"border\" + side + name;\n });\n\n _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\n var a, vars;\n\n if (arguments.length < 4) {\n a = props.map(function (prop) {\n return _get(plugin, prop, property);\n });\n vars = a.join(\" \");\n return vars.split(a[0]).length === 5 ? a[0] : vars;\n }\n\n a = (endValue + \"\").split(\" \");\n vars = {};\n props.forEach(function (prop, i) {\n return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\n });\n plugin.init(target, vars, tween);\n };\n });\n\n var CSSPlugin = {\n name: \"css\",\n register: _initCore,\n targetTest: function targetTest(target) {\n return target.style && target.nodeType;\n },\n init: function init(target, vars, tween, index, targets) {\n var props = this._props,\n style = target.style,\n startAt = tween.vars.startAt,\n startValue,\n endValue,\n endNum,\n startNum,\n type,\n specialProp,\n p,\n startUnit,\n endUnit,\n relative,\n isTransformRelated,\n transformPropTween,\n cache,\n smooth,\n hasPriority;\n _pluginInitted || _initCore();\n\n for (p in vars) {\n if (p === \"autoRound\") {\n continue;\n }\n\n endValue = vars[p];\n\n if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {\n continue;\n }\n\n type = typeof endValue;\n specialProp = _specialProps[p];\n\n if (type === \"function\") {\n endValue = endValue.call(tween, index, target, targets);\n type = typeof endValue;\n }\n\n if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\n endValue = _replaceRandom(endValue);\n }\n\n if (specialProp) {\n specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\n } else if (p.substr(0, 2) === \"--\") {\n startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\n endValue += \"\";\n _colorExp.lastIndex = 0;\n\n if (!_colorExp.test(startValue)) {\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n }\n\n endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\n this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\n props.push(p);\n } else if (type !== \"undefined\") {\n if (startAt && p in startAt) {\n startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\n _isString(startValue) && ~startValue.indexOf(\"random(\") && (startValue = _replaceRandom(startValue));\n getUnit(startValue + \"\") || (startValue += _config.units[p] || getUnit(_get(target, p)) || \"\");\n (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p));\n } else {\n startValue = _get(target, p);\n }\n\n startNum = parseFloat(startValue);\n relative = type === \"string\" && endValue.charAt(1) === \"=\" ? +(endValue.charAt(0) + \"1\") : 0;\n relative && (endValue = endValue.substr(2));\n endNum = parseFloat(endValue);\n\n if (p in _propertyAliases) {\n if (p === \"autoAlpha\") {\n if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\n startNum = 0;\n }\n\n _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\n }\n\n if (p !== \"scale\" && p !== \"transform\") {\n p = _propertyAliases[p];\n ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\n }\n }\n\n isTransformRelated = p in _transformProps;\n\n if (isTransformRelated) {\n if (!transformPropTween) {\n cache = target._gsap;\n cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform);\n smooth = vars.smoothOrigin !== false && cache.smooth;\n transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1);\n transformPropTween.dep = 1;\n }\n\n if (p === \"scale\") {\n this._pt = new PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? relative * endNum : endNum - cache.scaleY) || 0);\n props.push(\"scaleY\", p);\n p += \"X\";\n } else if (p === \"transformOrigin\") {\n endValue = _convertKeywordsToPercentages(endValue);\n\n if (cache.svg) {\n _applySVGOrigin(target, endValue, 0, smooth, 0, this);\n } else {\n endUnit = parseFloat(endValue.split(\" \")[2]) || 0;\n endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\n\n _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\n }\n\n continue;\n } else if (p === \"svgOrigin\") {\n _applySVGOrigin(target, endValue, 1, smooth, 0, this);\n\n continue;\n } else if (p in _rotationalProperties) {\n _addRotationalPropTween(this, cache, p, startNum, endValue, relative);\n\n continue;\n } else if (p === \"smoothOrigin\") {\n _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\n\n continue;\n } else if (p === \"force3D\") {\n cache[p] = endValue;\n continue;\n } else if (p === \"transform\") {\n _addRawTransformPTs(this, endValue, target);\n\n continue;\n }\n } else if (!(p in style)) {\n p = _checkPropPrefix(p) || p;\n }\n\n if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\n startUnit = (startValue + \"\").substr((startNum + \"\").length);\n endNum || (endNum = 0);\n endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);\n startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\n this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, relative ? relative * endNum : endNum - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\n this._pt.u = endUnit || 0;\n\n if (startUnit !== endUnit && endUnit !== \"%\") {\n this._pt.b = startValue;\n this._pt.r = _renderCSSPropWithBeginning;\n }\n } else if (!(p in style)) {\n if (p in target) {\n this.add(target, p, startValue || target[p], endValue, index, targets);\n } else {\n _missingPlugin(p, endValue);\n\n continue;\n }\n } else {\n _tweenComplexCSSString.call(this, target, p, startValue, endValue);\n }\n\n props.push(p);\n }\n }\n\n hasPriority && _sortPropTweensByPriority(this);\n },\n get: _get,\n aliases: _propertyAliases,\n getSetter: function getSetter(target, property, plugin) {\n var p = _propertyAliases[property];\n p && p.indexOf(\",\") < 0 && (property = p);\n return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : _getSetter(target, property);\n },\n core: {\n _removeProperty: _removeProperty,\n _getMatrix: _getMatrix\n }\n };\n gsap.utils.checkPrefix = _checkPropPrefix;\n\n (function (positionAndScale, rotation, others, aliases) {\n var all = _forEachName(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\n _transformProps[name] = 1;\n });\n\n _forEachName(rotation, function (name) {\n _config.units[name] = \"deg\";\n _rotationalProperties[name] = 1;\n });\n\n _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\n\n _forEachName(aliases, function (name) {\n var split = name.split(\":\");\n _propertyAliases[split[1]] = all[split[0]];\n });\n })(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\n\n _forEachName(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\n _config.units[name] = \"px\";\n });\n\n gsap.registerPlugin(CSSPlugin);\n\n var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,\n TweenMaxWithCSS = gsapWithCSS.core.Tween;\n\n exports.Back = Back;\n exports.Bounce = Bounce;\n exports.CSSPlugin = CSSPlugin;\n exports.Circ = Circ;\n exports.Cubic = Cubic;\n exports.Elastic = Elastic;\n exports.Expo = Expo;\n exports.Linear = Linear;\n exports.Power0 = Power0;\n exports.Power1 = Power1;\n exports.Power2 = Power2;\n exports.Power3 = Power3;\n exports.Power4 = Power4;\n exports.Quad = Quad;\n exports.Quart = Quart;\n exports.Quint = Quint;\n exports.Sine = Sine;\n exports.SteppedEase = SteppedEase;\n exports.Strong = Strong;\n exports.TimelineLite = Timeline;\n exports.TimelineMax = Timeline;\n exports.TweenLite = Tween;\n exports.TweenMax = TweenMaxWithCSS;\n exports.default = gsapWithCSS;\n exports.gsap = gsapWithCSS;\n\n if (typeof(window) === 'undefined' || window !== exports) {Object.defineProperty(exports, '__esModule', { value: true });} else {delete window.default;}\n\n})));\n","module.exports = {\n updateDisabledOptions: function () {\n const isMobile = window.innerWidth <= 991;\n const selects = [...document.querySelectorAll('select')].filter(sel => {\n // sel.nextSibling && sel.nextSibling.matches('.fsb-select')\n return sel.nextSibling && sel.nextSibling.classList && sel.nextSibling.classList.contains('fsb-select');\n });\n\n const setDisabledElement = (selectElement) => {\n const options = selectElement.querySelectorAll(':scope > option');\n const customOptions = selectElement.nextSibling.querySelectorAll(':scope > .fsb-list > .fsb-option');\n const specialChars = /[|]/;\n for(let index = 0; index < options.length; index++) {\n options[index].value && customOptions[index] ? customOptions[index].setAttribute('value', options[index].value) : null;\n if((options[index].classList.contains('disabled') || options[index].getAttribute('disabled') !== null) && specialChars.test(options[index].innerHTML)) {\n let tmpCustomOption = customOptions[index].innerHTML.split('|')[0].replaceAll(' ', '');\n customOptions[index].innerHTML = tmpCustomOption;\n customOptions[index].classList.add('disabled-element');\n } else if(options[index].classList.contains('disabled') || options[index].getAttribute('disabled') !== null) {\n if(options[index].innerHTML.replaceAll(' ', '').replaceAll('\\n', '') === customOptions[index].textContent) {\n customOptions[index].classList.add('disabled-element');\n } else {\n customOptions[index].classList.remove('disabled-element');\n }\n } else {\n customOptions[index] ? customOptions[index].classList.remove('disabled-element') : null;\n }\n }\n }\n\n if(selects){\n selects.forEach(sel => {\n if(isMobile) {\n sel.classList.add('fsb-ignore', 'mobile-version');\n sel.style.display = 'flex';\n sel.nextSibling.classList.add('hidden-field');\n setDisabledElement(sel);\n } else {\n sel.classList.remove('fsb-ignore', 'mobile-version');\n sel.style.display = 'none';\n sel.nextSibling.classList.remove('hidden-field');\n setDisabledElement(sel);\n }\n });\n }\n }\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","'use strict';\n\nconst formValidation = require('core/components/formValidation');\nconst clientSideValidation = require('core/components/clientSideValidation');\nconst addToCartValidation = require('core/product/addToCartValidation');\nconst $body = $('body');\nconst showOnModal = document.querySelector('body').classList.contains('Margiela') || document.querySelector('body').classList.contains('JilSander');\n\nmodule.exports = {\n init: function () {\n clientSideValidation.init();\n initNotifyReCaptcha();\n\n $body.on('click', '.js_product-notify-open', function () {\n $(this).parent().remove();\n $('.product-notify-body').show();\n });\n\n $body.on('submit', '.js_notify-when-available', function (e) {\n const $form = $(this);\n e.preventDefault();\n $.spinner().start();\n clientSideValidation.functions.clearFormErrors($form);\n $('.product-notify-content .success-message').removeClass('success');\n\n if(showOnModal && !$form.find('[type=\"checkbox\"][required=\"required\"]').prop('checked')) {\n $form.find('[type=\"checkbox\"][required=\"required\"]').addClass('-invalid');\n return;\n }\n \n var isNewPDP = false;\n \n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n // Check if all variation attribute selected\n let $productContainer = $(this).closest('.product-detail');\n if (addToCartValidation($productContainer) || isNewPDP) {\n $.post({\n url: $form.attr('action'),\n dataType: 'json',\n data: $form.serialize(),\n success: function (data) {\n if (!data.success) {\n formValidation($form, data);\n } else {\n if (!isNewPDP) {\n $('.product-notify-content .success-message').addClass('success');\n } else {\n\n $('.product-notify-header .title').addClass('d-none');\n $('.product-notify-header .title-success').removeClass('d-none');\n $('.product-notify-content .product-coming-soon').addClass('d-none');\n $('.notify-message-success .user-email').text(data.email + ' ');\n $('.product-notify-content .product-notify-content-success').addClass('success');\n }\n \n //Tealium trigger \"Back In Stock\"\n $('body').trigger('product:afterBackInStock');\n if(showOnModal) {\n $('body').trigger('product:backInStockComplete');\n document.querySelector('#notify-me-modal .modal-close').click();\n\n // show notification\n const event = new CustomEvent('notification:show', {\n detail: { \n message: data.message,\n icon: true,\n link: false\n }\n });\n document.body.dispatchEvent(event);\n }\n }; \n },\n complete: function () {\n $.spinner().stop();\n },\n });\n } else {\n $.spinner().stop();\n }\n\n return false;\n });\n },\n updateForm: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n var $container;\n \n var isNewPDP = false;\n \n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n if (!isNewPDP) {\n $container = showOnModal ? $('.product-notify .modal-content') : $('.product-notify');\n } else if (isNewPDP && $('.notify-size.is-open').length > 0) {\n $container = $('.notify-size.is-open .product-notify-content .product-coming-soon.coming-soon');\n } else {\n $container = $('.product-notify');\n }\n if ($container.length > 0) {\n \n if (isNewPDP && $('.notify-size.is-open').length > 0) {\n $container.empty().append(response.product.notifyWhenAvailableHtml);\n $('.notify-size.is-open .product-notify-content .product-coming-soon').removeClass('d-none');\n $('.notify-size.is-open .product-notify-header .title').removeClass('d-none');\n $('.notify-size.is-open .product-notify-header .title-success').addClass('d-none');\n $('.notify-size.is-open .product-notify-content .product-notify-content-success').removeClass('success');\n } else if (isNewPDP && $('.notify-size.is-open').length == 0) {\n $container.empty().append(response.product.notifyWhenAvailablePopUpHtml);\n $('.product-notify .product-notify-content .product-coming-soon').removeClass('d-none');\n $('.product-notify .product-notify-header .title').removeClass('d-none');\n $('.product-notify .product-notify-header .title-success').addClass('d-none');\n $('.product-notify .product-notify-content .product-notify-content-success').removeClass('success');\n } else {\n $container.empty().append(response.product.notifyWhenAvailableHtml);\n }\n\n const $form = $container.find('form');\n if(!showOnModal) {\n if ($('.layer-product-notify.notify-size.is-open').length < 1) {\n if ($form.length > 0) {\n $('#add-to-cart-wishlist-wrapper').hide();\n clientSideValidation.functions.reAttachNoBubbleEvents();\n } else {\n $('#add-to-cart-wishlist-wrapper').show();\n }\n }\n }\n }\n\n initNotifyReCaptcha();\n });\n },\n};\n\nfunction initNotifyReCaptcha() {\n let $recaptchaInput = $('.js_notify-when-available #gReCaptchaWidgetNotify');\n if ($recaptchaInput.length > 0) {\n grecaptcha.ready(function() {\n grecaptcha.execute($recaptchaInput.data('sitekey'), { action: 'init' }).then(function(token) {\n $recaptchaInput.val(token);\n });\n });\n }\n}\n","export function hasProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function lastItemOf(arr) {\n return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n items.forEach((item) => {\n if (arr.includes(item)) {\n return;\n }\n arr.push(item);\n });\n return arr;\n}\n\nexport function stringToArray(str, separator) {\n // convert empty string to an empty array\n return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n const minOK = min === undefined || testVal >= min;\n const maxOK = max === undefined || testVal <= max;\n return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n let val = attributes[attr];\n if (typeof val === 'function') {\n val = val(index);\n }\n return `${src} ${attr}=\"${val}\"`;\n }, tagName);\n html += `<${openTagSrc}></${tagName}>`;\n\n const next = index + 1;\n return next < repeat\n ? createTagRepeat(tagName, repeat, attributes, next, html)\n : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n return html.replace(/>\\s+/g, '>').replace(/\\s+</, '<');\n}\n","export function stripTime(timeValue) {\n return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n switch (args.length) {\n case 0:\n return today();\n case 1:\n return stripTime(args[0]);\n }\n\n // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n const newDate = new Date(0);\n newDate.setFullYear(...args);\n return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n const newDate = new Date(date);\n return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n // If the day of the date is not in the new month, the last day of the new\n // month will be returned. e.g. Jan 31 + 1 month → Feb 28 (not Mar 03)\n const newDate = new Date(date);\n const monthsToSet = newDate.getMonth() + amount;\n let expectedMonth = monthsToSet % 12;\n if (expectedMonth < 0) {\n expectedMonth += 12;\n }\n\n const time = newDate.setMonth(monthsToSet);\n return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n // new year will be returned.\n const newDate = new Date(date);\n const expectedMonth = newDate.getMonth();\n const time = newDate.setFullYear(newDate.getFullYear() + amount);\n return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n const baseDay = new Date(baseDate).getDay();\n return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\n// Get the ISO week of a date\nexport function getWeek(date) {\n // start of ISO week is Monday\n const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n // 1st week == the week where the 4th of January is in\n const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n const year = new Date(date).getFullYear();\n return Math.floor(year / years) * years;\n}\n","import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~年月日]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n y(date, year) {\n return new Date(date).setFullYear(parseInt(year, 10));\n },\n m(date, month, locale) {\n const newDate = new Date(date);\n let monthIndex = parseInt(month, 10) - 1;\n\n if (isNaN(monthIndex)) {\n if (!month) {\n return NaN;\n }\n\n const monthName = month.toLowerCase();\n const compareNames = name => name.toLowerCase().startsWith(monthName);\n // compare with both short and full names because some locales have periods\n // in the short names (not equal to the first X letters of the full names)\n monthIndex = locale.monthsShort.findIndex(compareNames);\n if (monthIndex < 0) {\n monthIndex = locale.months.findIndex(compareNames);\n }\n if (monthIndex < 0) {\n return NaN;\n }\n }\n\n newDate.setMonth(monthIndex);\n return newDate.getMonth() !== normalizeMonth(monthIndex)\n ? newDate.setDate(0)\n : newDate.getTime();\n },\n d(date, day) {\n return new Date(date).setDate(parseInt(day, 10));\n },\n};\n// format functions for date parts\nconst formatFns = {\n d(date) {\n return date.getDate();\n },\n dd(date) {\n return padZero(date.getDate(), 2);\n },\n D(date, locale) {\n return locale.daysShort[date.getDay()];\n },\n DD(date, locale) {\n return locale.days[date.getDay()];\n },\n m(date) {\n return date.getMonth() + 1;\n },\n mm(date) {\n return padZero(date.getMonth() + 1, 2);\n },\n M(date, locale) {\n return locale.monthsShort[date.getMonth()];\n },\n MM(date, locale) {\n return locale.months[date.getMonth()];\n },\n y(date) {\n return date.getFullYear();\n },\n yy(date) {\n return padZero(date.getFullYear(), 2).slice(-2);\n },\n yyyy(date) {\n return padZero(date.getFullYear(), 4);\n },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n if (typeof format !== 'string') {\n throw new Error(\"Invalid date format.\");\n }\n if (format in knownFormats) {\n return knownFormats[format];\n }\n\n // sprit the format string into parts and seprators\n const separators = format.split(reFormatTokens);\n const parts = format.match(new RegExp(reFormatTokens, 'g'));\n if (separators.length === 0 || !parts) {\n throw new Error(\"Invalid date format.\");\n }\n\n // collect format functions used in the format\n const partFormatters = parts.map(token => formatFns[token]);\n\n // collect parse function keys used in the format\n // iterate over parseFns' keys in order to keep the order of the keys.\n const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n if (token) {\n keys.push(key);\n }\n return keys;\n }, []);\n\n return knownFormats[format] = {\n parser(dateStr, locale) {\n const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n if (part.length > 0 && parts[index]) {\n const token = parts[index][0];\n if (token === 'M') {\n dtParts.m = part;\n } else if (token !== 'D') {\n dtParts[token] = part;\n }\n }\n return dtParts;\n }, {});\n\n // iterate over partParserkeys so that the parsing is made in the oder\n // of year, month and day to prevent the day parser from correcting last\n // day of month wrongly\n return partParserKeys.reduce((origDate, key) => {\n const newDate = parseFns[key](origDate, dateParts[key], locale);\n // ingnore the part failed to parse\n return isNaN(newDate) ? origDate : newDate;\n }, today());\n },\n formatter(date, locale) {\n let dateStr = partFormatters.reduce((str, fn, index) => {\n return str += `${separators[index]}${fn(date, locale)}`;\n }, '');\n // separators' length is always parts' length + 1,\n return dateStr += lastItemOf(separators);\n },\n };\n}\n\nexport function parseDate(dateStr, format, locale) {\n if (dateStr instanceof Date || typeof dateStr === 'number') {\n const date = stripTime(dateStr);\n return isNaN(date) ? undefined : date;\n }\n if (!dateStr) {\n return undefined;\n }\n if (dateStr === 'today') {\n return today();\n }\n\n if (format && format.toValue) {\n const date = format.toValue(dateStr, format, locale);\n return isNaN(date) ? undefined : stripTime(date);\n }\n\n return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n if (isNaN(date) || (!date && date !== 0)) {\n return '';\n }\n\n const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n if (format.toDisplay) {\n return format.toDisplay(dateObj, format, locale);\n }\n\n return parseFormatString(format).formatter(dateObj, locale);\n}\n","const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n// - each definition must be a flat array of event target and the arguments\n// used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n let registered = listenerRegistry.get(keyObj);\n if (!registered) {\n registered = [];\n listenerRegistry.set(keyObj, registered);\n }\n listeners.forEach((listener) => {\n addEventListener.call(...listener);\n registered.push(listener);\n });\n}\n\nexport function unregisterListeners(keyObj) {\n let listeners = listenerRegistry.get(keyObj);\n if (!listeners) {\n return;\n }\n listeners.forEach((listener) => {\n removeEventListener.call(...listener);\n });\n listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n const getComposedPath = (node, path = []) => {\n path.push(node);\n\n let parent;\n if (node.parentNode) {\n parent = node.parentNode;\n } else if (node.host) { // ShadowRoot\n parent = node.host;\n } else if (node.defaultView) { // Document\n parent = node.defaultView;\n }\n return parent ? getComposedPath(parent, path) : path;\n };\n\n Event.prototype.composedPath = function () {\n return getComposedPath(this.target);\n };\n}\n\nfunction findFromPath(path, criteria, currentTarget, index = 0) {\n const el = path[index];\n if (criteria(el)) {\n return el;\n } else if (el === currentTarget || !el.parentElement) {\n // stop when reaching currentTarget or <html>\n return;\n }\n return findFromPath(path, criteria, currentTarget, index + 1);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n const criteria = typeof selector === 'function' ? selector : el => el.matches(selector);\n return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n","// default locales\nexport const locales = {\n en: {\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n today: \"Today\",\n clear: \"Clear\",\n titleFormat: \"MM y\"\n }\n};\n","// config options updatable by setOptions() and their default values\nconst defaultOptions = {\n autohide: false,\n beforeShowDay: null,\n beforeShowDecade: null,\n beforeShowMonth: null,\n beforeShowYear: null,\n calendarWeeks: false,\n clearBtn: false,\n dateDelimiter: ',',\n datesDisabled: [],\n daysOfWeekDisabled: [],\n daysOfWeekHighlighted: [],\n defaultViewDate: undefined, // placeholder, defaults to today() by the program\n disableTouchKeyboard: false,\n format: 'mm/dd/yyyy',\n language: 'en',\n maxDate: null,\n maxNumberOfDates: 1,\n maxView: 3,\n minDate: null,\n nextArrow: '»',\n orientation: 'auto',\n pickLevel: 0,\n prevArrow: '«',\n showDaysOfWeek: true,\n showOnClick: true,\n showOnFocus: true,\n startView: 0,\n title: '',\n todayBtn: false,\n todayBtnMode: 0,\n todayHighlight: false,\n updateOnBlur: true,\n weekStart: 0,\n};\n\nexport default defaultOptions;\n","const range = document.createRange();\n\nexport function parseHTML(html) {\n return range.createContextualFragment(html);\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n if (el.style.display === 'none') {\n return;\n }\n // back up the existing display setting in data-style-display\n if (el.style.display) {\n el.dataset.styleDisplay = el.style.display;\n }\n el.style.display = 'none';\n}\n\nexport function showElement(el) {\n if (el.style.display !== 'none') {\n return;\n }\n if (el.dataset.styleDisplay) {\n // restore backed-up dispay property\n el.style.display = el.dataset.styleDisplay;\n delete el.dataset.styleDisplay;\n } else {\n el.style.display = '';\n }\n}\n\nexport function emptyChildNodes(el) {\n if (el.firstChild) {\n el.removeChild(el.firstChild);\n emptyChildNodes(el);\n }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n emptyChildNodes(el);\n if (newChildNodes instanceof DocumentFragment) {\n el.appendChild(newChildNodes);\n } else if (typeof newChildNodes === 'string') {\n el.appendChild(parseHTML(newChildNodes));\n } else if (typeof newChildNodes.forEach === 'function') {\n newChildNodes.forEach((node) => {\n el.appendChild(node);\n });\n }\n}\n","import {hasProperty, pushUnique} from '../lib/utils.js';\nimport {dateValue} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n language: defaultLang,\n format: defaultFormat,\n weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n return dow.length < 6 && day >= 0 && day < 7\n ? pushUnique(dow, day)\n : dow;\n}\n\nfunction calcEndOfWeek(startOfWeek) {\n return (startOfWeek + 6) % 7;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n const date = parseDate(value, format, locale);\n return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n const viewId = parseInt(value, 10);\n return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n const inOpts = Object.assign({}, options);\n const config = {};\n const locales = datepicker.constructor.locales;\n let {\n format,\n language,\n locale,\n maxDate,\n maxView,\n minDate,\n pickLevel,\n startView,\n weekStart,\n } = datepicker.config || {};\n\n if (inOpts.language) {\n let lang;\n if (inOpts.language !== language) {\n if (locales[inOpts.language]) {\n lang = inOpts.language;\n } else {\n // Check if langauge + region tag can fallback to the one without\n // region (e.g. fr-CA → fr)\n lang = inOpts.language.split('-')[0];\n if (locales[lang] === undefined) {\n lang = false;\n }\n }\n }\n delete inOpts.language;\n if (lang) {\n language = config.language = lang;\n\n // update locale as well when updating language\n const origLocale = locale || locales[defaultLang];\n // use default language's properties for the fallback\n locale = Object.assign({\n format: defaultFormat,\n weekStart: defaultWeekStart\n }, locales[defaultLang]);\n if (language !== defaultLang) {\n Object.assign(locale, locales[language]);\n }\n config.locale = locale;\n // if format and/or weekStart are the same as old locale's defaults,\n // update them to new locale's defaults\n if (format === origLocale.format) {\n format = config.format = locale.format;\n }\n if (weekStart === origLocale.weekStart) {\n weekStart = config.weekStart = locale.weekStart;\n config.weekEnd = calcEndOfWeek(locale.weekStart);\n }\n }\n }\n\n if (inOpts.format) {\n const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n const hasToValue = typeof inOpts.format.toValue === 'function';\n const validFormatString = reFormatTokens.test(inOpts.format);\n if ((hasToDisplay && hasToValue) || validFormatString) {\n format = config.format = inOpts.format;\n }\n delete inOpts.format;\n }\n\n //*** dates ***//\n // while min and maxDate for \"no limit\" in the options are better to be null\n // (especially when updating), the ones in the config have to be undefined\n // because null is treated as 0 (= unix epoch) when comparing with time value\n let minDt = minDate;\n let maxDt = maxDate;\n if (inOpts.minDate !== undefined) {\n minDt = inOpts.minDate === null\n ? dateValue(0, 0, 1) // set 0000-01-01 to prevent negative values for year\n : validateDate(inOpts.minDate, format, locale, minDt);\n delete inOpts.minDate;\n }\n if (inOpts.maxDate !== undefined) {\n maxDt = inOpts.maxDate === null\n ? undefined\n : validateDate(inOpts.maxDate, format, locale, maxDt);\n delete inOpts.maxDate;\n }\n if (maxDt < minDt) {\n minDate = config.minDate = maxDt;\n maxDate = config.maxDate = minDt;\n } else {\n if (minDate !== minDt) {\n minDate = config.minDate = minDt;\n }\n if (maxDate !== maxDt) {\n maxDate = config.maxDate = maxDt;\n }\n }\n\n if (inOpts.datesDisabled) {\n config.datesDisabled = inOpts.datesDisabled.reduce((dates, dt) => {\n const date = parseDate(dt, format, locale);\n return date !== undefined ? pushUnique(dates, date) : dates;\n }, []);\n delete inOpts.datesDisabled;\n }\n if (inOpts.defaultViewDate !== undefined) {\n const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n if (viewDate !== undefined) {\n config.defaultViewDate = viewDate;\n }\n delete inOpts.defaultViewDate;\n }\n\n //*** days of week ***//\n if (inOpts.weekStart !== undefined) {\n const wkStart = Number(inOpts.weekStart) % 7;\n if (!isNaN(wkStart)) {\n weekStart = config.weekStart = wkStart;\n config.weekEnd = calcEndOfWeek(wkStart);\n }\n delete inOpts.weekStart;\n }\n if (inOpts.daysOfWeekDisabled) {\n config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekDisabled;\n }\n if (inOpts.daysOfWeekHighlighted) {\n config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekHighlighted;\n }\n\n //*** multi date ***//\n if (inOpts.maxNumberOfDates !== undefined) {\n const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n if (maxNumberOfDates >= 0) {\n config.maxNumberOfDates = maxNumberOfDates;\n config.multidate = maxNumberOfDates !== 1;\n }\n delete inOpts.maxNumberOfDates;\n }\n if (inOpts.dateDelimiter) {\n config.dateDelimiter = String(inOpts.dateDelimiter);\n delete inOpts.dateDelimiter;\n }\n\n //*** pick level & view ***//\n let newPickLevel = pickLevel;\n if (inOpts.pickLevel !== undefined) {\n newPickLevel = validateViewId(inOpts.pickLevel, 2);\n delete inOpts.pickLevel;\n }\n if (newPickLevel !== pickLevel) {\n pickLevel = config.pickLevel = newPickLevel;\n }\n\n let newMaxView = maxView;\n if (inOpts.maxView !== undefined) {\n newMaxView = validateViewId(inOpts.maxView, maxView);\n delete inOpts.maxView;\n }\n // ensure max view >= pick level\n newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n if (newMaxView !== maxView) {\n maxView = config.maxView = newMaxView;\n }\n\n let newStartView = startView;\n if (inOpts.startView !== undefined) {\n newStartView = validateViewId(inOpts.startView, newStartView);\n delete inOpts.startView;\n }\n // ensure pick level <= start view <= max view\n if (newStartView < pickLevel) {\n newStartView = pickLevel;\n } else if (newStartView > maxView) {\n newStartView = maxView;\n }\n if (newStartView !== startView) {\n config.startView = newStartView;\n }\n\n //*** template ***//\n if (inOpts.prevArrow) {\n const prevArrow = parseHTML(inOpts.prevArrow);\n if (prevArrow.childNodes.length > 0) {\n config.prevArrow = prevArrow.childNodes;\n }\n delete inOpts.prevArrow;\n }\n if (inOpts.nextArrow) {\n const nextArrow = parseHTML(inOpts.nextArrow);\n if (nextArrow.childNodes.length > 0) {\n config.nextArrow = nextArrow.childNodes;\n }\n delete inOpts.nextArrow;\n }\n\n //*** misc ***//\n if (inOpts.disableTouchKeyboard !== undefined) {\n config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n delete inOpts.disableTouchKeyboard;\n }\n if (inOpts.orientation) {\n const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n config.orientation = {\n x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n };\n delete inOpts.orientation;\n }\n if (inOpts.todayBtnMode !== undefined) {\n switch(inOpts.todayBtnMode) {\n case 0:\n case 1:\n config.todayBtnMode = inOpts.todayBtnMode;\n }\n delete inOpts.todayBtnMode;\n }\n\n //*** copy the rest ***//\n Object.keys(inOpts).forEach((key) => {\n if (inOpts[key] !== undefined && hasProperty(defaultOptions, key)) {\n config[key] = inOpts[key];\n }\n });\n\n return config;\n}\n","import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst pickerTemplate = optimizeTemplateHTML(`<div class=\"datepicker\">\n <div class=\"datepicker-picker\">\n <div class=\"datepicker-header\">\n <div class=\"datepicker-title\"></div>\n <div class=\"datepicker-controls\">\n <button type=\"button\" class=\"%buttonClass% prev-btn\"></button>\n <button type=\"button\" class=\"%buttonClass% view-switch\"></button>\n <button type=\"button\" class=\"%buttonClass% next-btn\"></button>\n </div>\n </div>\n <div class=\"datepicker-main\"></div>\n <div class=\"datepicker-footer\">\n <div class=\"datepicker-controls\">\n <button type=\"button\" class=\"%buttonClass% today-btn\"></button>\n <button type=\"button\" class=\"%buttonClass% clear-btn\"></button>\n </div>\n </div>\n </div>\n</div>`);\n\nexport default pickerTemplate;\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst daysTemplate = optimizeTemplateHTML(`<div class=\"days\">\n <div class=\"days-of-week\">${createTagRepeat('span', 7, {class: 'dow'})}</div>\n <div class=\"datepicker-grid\">${createTagRepeat('span', 42)}</div>\n</div>`);\n\nexport default daysTemplate;\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst calendarWeeksTemplate = optimizeTemplateHTML(`<div class=\"calendar-weeks\">\n <div class=\"days-of-week\"><span class=\"dow\"></span></div>\n <div class=\"weeks\">${createTagRepeat('span', 6, {class: 'week'})}</div>\n</div>`);\n\nexport default calendarWeeksTemplate;\n","import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n constructor(picker, config) {\n Object.assign(this, config, {\n picker,\n element: parseHTML(`<div class=\"datepicker-view\"></div>`).firstChild,\n selected: [],\n });\n this.init(this.picker.datepicker.config);\n }\n\n init(options) {\n if (options.pickLevel !== undefined) {\n this.isMinView = this.id === options.pickLevel;\n }\n this.setOptions(options);\n this.updateFocus();\n this.updateSelection();\n }\n\n // Execute beforeShow() callback and apply the result to the element\n // args:\n // - current - current value on the iteration on view rendering\n // - timeValue - time value of the date to pass to beforeShow()\n performBeforeHook(el, current, timeValue) {\n let result = this.beforeShow(new Date(timeValue));\n switch (typeof result) {\n case 'boolean':\n result = {enabled: result};\n break;\n case 'string':\n result = {classes: result};\n }\n\n if (result) {\n if (result.enabled === false) {\n el.classList.add('disabled');\n pushUnique(this.disabled, current);\n }\n if (result.classes) {\n const extraClasses = result.classes.split(/\\s+/);\n el.classList.add(...extraClasses);\n if (extraClasses.includes('disabled')) {\n pushUnique(this.disabled, current);\n }\n }\n if (result.content) {\n replaceChildNodes(el, result.content);\n }\n }\n }\n}\n","import {hasProperty, pushUnique} from '../../lib/utils.js';\nimport {today, dateValue, addDays, addWeeks, dayOfTheWeekOf, getWeek} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport calendarWeeksTemplate from '../templates/calendarWeeksTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n constructor(picker) {\n super(picker, {\n id: 0,\n name: 'days',\n cellClass: 'day',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n const inner = parseHTML(daysTemplate).firstChild;\n this.dow = inner.firstChild;\n this.grid = inner.lastChild;\n this.element.appendChild(inner);\n }\n super.init(options);\n }\n\n setOptions(options) {\n let updateDOW;\n\n if (hasProperty(options, 'minDate')) {\n this.minDate = options.minDate;\n }\n if (hasProperty(options, 'maxDate')) {\n this.maxDate = options.maxDate;\n }\n if (options.datesDisabled) {\n this.datesDisabled = options.datesDisabled;\n }\n if (options.daysOfWeekDisabled) {\n this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n updateDOW = true;\n }\n if (options.daysOfWeekHighlighted) {\n this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n }\n if (options.todayHighlight !== undefined) {\n this.todayHighlight = options.todayHighlight;\n }\n if (options.weekStart !== undefined) {\n this.weekStart = options.weekStart;\n this.weekEnd = options.weekEnd;\n updateDOW = true;\n }\n if (options.locale) {\n const locale = this.locale = options.locale;\n this.dayNames = locale.daysMin;\n this.switchLabelFormat = locale.titleFormat;\n updateDOW = true;\n }\n if (options.beforeShowDay !== undefined) {\n this.beforeShow = typeof options.beforeShowDay === 'function'\n ? options.beforeShowDay\n : undefined;\n }\n\n if (options.calendarWeeks !== undefined) {\n if (options.calendarWeeks && !this.calendarWeeks) {\n const weeksElem = parseHTML(calendarWeeksTemplate).firstChild;\n this.calendarWeeks = {\n element: weeksElem,\n dow: weeksElem.firstChild,\n weeks: weeksElem.lastChild,\n };\n this.element.insertBefore(weeksElem, this.element.firstChild);\n } else if (this.calendarWeeks && !options.calendarWeeks) {\n this.element.removeChild(this.calendarWeeks.element);\n this.calendarWeeks = null;\n }\n }\n if (options.showDaysOfWeek !== undefined) {\n if (options.showDaysOfWeek) {\n showElement(this.dow);\n if (this.calendarWeeks) {\n showElement(this.calendarWeeks.dow);\n }\n } else {\n hideElement(this.dow);\n if (this.calendarWeeks) {\n hideElement(this.calendarWeeks.dow);\n }\n }\n }\n\n // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n if (updateDOW) {\n Array.from(this.dow.children).forEach((el, index) => {\n const dow = (this.weekStart + index) % 7;\n el.textContent = this.dayNames[dow];\n el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n });\n }\n }\n\n // Apply update on the focused date to view's settings\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const viewYear = viewDate.getFullYear();\n const viewMonth = viewDate.getMonth();\n const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n this.first = firstOfMonth;\n this.last = dateValue(viewYear, viewMonth + 1, 0);\n this.start = start;\n this.focused = this.picker.viewDate;\n }\n\n // Apply update on the selected dates to view's settings\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates;\n if (rangepicker) {\n this.range = rangepicker.dates;\n }\n }\n\n // Update the entire view UI\n render() {\n // update today marker on ever render\n this.today = this.todayHighlight ? today() : undefined;\n // refresh disabled dates on every render in order to clear the ones added\n // by beforeShow hook at previous render\n this.disabled = [...this.datesDisabled];\n\n const switchLabel = formatDate(this.focused, this.switchLabelFormat, this.locale);\n this.picker.setViewSwitchLabel(switchLabel);\n this.picker.setPrevBtnDisabled(this.first <= this.minDate);\n this.picker.setNextBtnDisabled(this.last >= this.maxDate);\n\n if (this.calendarWeeks) {\n // start of the UTC week (Monday) of the 1st of the month\n const startOfWeek = dayOfTheWeekOf(this.first, 1, 1);\n Array.from(this.calendarWeeks.weeks.children).forEach((el, index) => {\n el.textContent = getWeek(addWeeks(startOfWeek, index));\n });\n }\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const current = addDays(this.start, index);\n const date = new Date(current);\n const day = date.getDay();\n\n el.className = `datepicker-cell ${this.cellClass}`;\n el.dataset.date = current;\n el.textContent = date.getDate();\n\n if (current < this.first) {\n classList.add('prev');\n } else if (current > this.last) {\n classList.add('next');\n }\n if (this.today === current) {\n classList.add('today');\n }\n if (current < this.minDate || current > this.maxDate || this.disabled.includes(current)) {\n classList.add('disabled');\n }\n if (this.daysOfWeekDisabled.includes(day)) {\n classList.add('disabled');\n pushUnique(this.disabled, current);\n }\n if (this.daysOfWeekHighlighted.includes(day)) {\n classList.add('highlighted');\n }\n if (this.range) {\n const [rangeStart, rangeEnd] = this.range;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, current, current);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const [rangeStart, rangeEnd] = this.range || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el) => {\n const current = Number(el.dataset.date);\n const classList = el.classList;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n const index = Math.round((this.focused - this.start) / 86400000);\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[index].classList.add('focused');\n }\n}\n","import {hasProperty, pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n if (!range || !range[0] || !range[1]) {\n return;\n }\n\n const [[startY, startM], [endY, endM]] = range;\n if (startY > thisYear || endY < thisYear) {\n return;\n }\n return [\n startY === thisYear ? startM : -1,\n endY === thisYear ? endM : 12,\n ];\n}\n\nexport default class MonthsView extends View {\n constructor(picker) {\n super(picker, {\n id: 1,\n name: 'months',\n cellClass: 'month',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.grid = this.element;\n this.element.classList.add('months', 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n }\n super.init(options);\n }\n\n setOptions(options) {\n if (options.locale) {\n this.monthNames = options.locale.monthsShort;\n }\n if (hasProperty(options, 'minDate')) {\n if (options.minDate === undefined) {\n this.minYear = this.minMonth = this.minDate = undefined;\n } else {\n const minDateObj = new Date(options.minDate);\n this.minYear = minDateObj.getFullYear();\n this.minMonth = minDateObj.getMonth();\n this.minDate = minDateObj.setDate(1);\n }\n }\n if (hasProperty(options, 'maxDate')) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxMonth = this.maxDate = undefined;\n } else {\n const maxDateObj = new Date(options.maxDate);\n this.maxYear = maxDateObj.getFullYear();\n this.maxMonth = maxDateObj.getMonth();\n this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n }\n }\n if (options.beforeShowMonth !== undefined) {\n this.beforeShow = typeof options.beforeShowMonth === 'function'\n ? options.beforeShowMonth\n : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n this.year = viewDate.getFullYear();\n this.focused = viewDate.getMonth();\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((selected, timeValue) => {\n const date = new Date(timeValue);\n const year = date.getFullYear();\n const month = date.getMonth();\n if (selected[year] === undefined) {\n selected[year] = [month];\n } else {\n pushUnique(selected[year], month);\n }\n return selected;\n }, {});\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n const date = new Date(timeValue);\n return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n });\n }\n }\n\n // Update the entire view UI\n render() {\n // refresh disabled months on every render in order to clear the ones added\n // by beforeShow hook at previous render\n this.disabled = [];\n\n this.picker.setViewSwitchLabel(this.year);\n this.picker.setPrevBtnDisabled(this.year <= this.minYear);\n this.picker.setNextBtnDisabled(this.year >= this.maxYear);\n\n const selected = this.selected[this.year] || [];\n const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n const isMinYear = this.year === this.minYear;\n const isMaxYear = this.year === this.maxYear;\n const range = computeMonthRange(this.range, this.year);\n\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const date = dateValue(this.year, index, 1);\n\n el.className = `datepicker-cell ${this.cellClass}`;\n if (this.isMinView) {\n el.dataset.date = date;\n }\n // reset text on every render to clear the custom content set\n // by beforeShow hook at previous render\n el.textContent = this.monthNames[index];\n\n if (\n yrOutOfRange\n || isMinYear && index < this.minMonth\n || isMaxYear && index > this.maxMonth\n ) {\n classList.add('disabled');\n }\n if (range) {\n const [rangeStart, rangeEnd] = range;\n if (index > rangeStart && index < rangeEnd) {\n classList.add('range');\n }\n if (index === rangeStart) {\n classList.add('range-start');\n }\n if (index === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (selected.includes(index)) {\n classList.add('selected');\n }\n if (index === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, index, date);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const selected = this.selected[this.year] || [];\n const [rangeStart, rangeEnd] = computeMonthRange(this.range, this.year) || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n if (index > rangeStart && index < rangeEnd) {\n classList.add('range');\n }\n if (index === rangeStart) {\n classList.add('range-start');\n }\n if (index === rangeEnd) {\n classList.add('range-end');\n }\n if (selected.includes(index)) {\n classList.add('selected');\n }\n if (index === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[this.focused].classList.add('focused');\n }\n}","import {hasProperty, pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n constructor(picker, config) {\n super(picker, config);\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.navStep = this.step * 10;\n this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n this.grid = this.element;\n this.element.classList.add(this.name, 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n }\n super.init(options);\n }\n\n setOptions(options) {\n if (hasProperty(options, 'minDate')) {\n if (options.minDate === undefined) {\n this.minYear = this.minDate = undefined;\n } else {\n this.minYear = startOfYearPeriod(options.minDate, this.step);\n this.minDate = dateValue(this.minYear, 0, 1);\n }\n }\n if (hasProperty(options, 'maxDate')) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxDate = undefined;\n } else {\n this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n this.maxDate = dateValue(this.maxYear, 11, 31);\n }\n }\n if (options[this.beforeShowOption] !== undefined) {\n const beforeShow = options[this.beforeShowOption];\n this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const first = startOfYearPeriod(viewDate, this.navStep);\n const last = first + 9 * this.step;\n\n this.first = first;\n this.last = last;\n this.start = first - this.step;\n this.focused = startOfYearPeriod(viewDate, this.step);\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((years, timeValue) => {\n return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n }, []);\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n if (timeValue !== undefined) {\n return startOfYearPeriod(timeValue, this.step);\n }\n });\n }\n }\n\n // Update the entire view UI\n render() {\n // refresh disabled years on every render in order to clear the ones added\n // by beforeShow hook at previous render\n this.disabled = [];\n\n this.picker.setViewSwitchLabel(`${this.first}-${this.last}`);\n this.picker.setPrevBtnDisabled(this.first <= this.minYear);\n this.picker.setNextBtnDisabled(this.last >= this.maxYear);\n\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const current = this.start + (index * this.step);\n const date = dateValue(current, 0, 1);\n\n el.className = `datepicker-cell ${this.cellClass}`;\n if (this.isMinView) {\n el.dataset.date = date;\n }\n el.textContent = el.dataset.year = current;\n\n if (index === 0) {\n classList.add('prev');\n } else if (index === 11) {\n classList.add('next');\n }\n if (current < this.minYear || current > this.maxYear) {\n classList.add('disabled');\n }\n if (this.range) {\n const [rangeStart, rangeEnd] = this.range;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, current, date);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const [rangeStart, rangeEnd] = this.range || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el) => {\n const current = Number(el.textContent);\n const classList = el.classList;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n const index = Math.round((this.focused - this.start) / this.step);\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[index].classList.add('focused');\n }\n}\n","import {limitToRange} from '../lib/utils.js';\nimport {addMonths, addYears} from '../lib/date.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n const detail = {\n date: datepicker.getDate(),\n viewDate: new Date(datepicker.picker.viewDate),\n viewId: datepicker.picker.currentView.id,\n datepicker,\n };\n datepicker.element.dispatchEvent(new CustomEvent(type, {detail}));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n const {minDate, maxDate} = datepicker.config;\n const {currentView, viewDate} = datepicker.picker;\n let newViewDate;\n switch (currentView.id) {\n case 0:\n newViewDate = addMonths(viewDate, direction);\n break;\n case 1:\n newViewDate = addYears(viewDate, direction);\n break;\n default:\n newViewDate = addYears(viewDate, direction * currentView.navStep);\n }\n newViewDate = limitToRange(newViewDate, minDate, maxDate);\n datepicker.picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n const viewId = datepicker.picker.currentView.id;\n if (viewId === datepicker.config.maxView) {\n return;\n }\n datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function unfocus(datepicker) {\n if (datepicker.config.updateOnBlur) {\n datepicker.update({autohide: true});\n } else {\n datepicker.refresh('input');\n datepicker.hide();\n }\n}\n","import {today, addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n const picker = datepicker.picker;\n const viewDate = new Date(picker.viewDate);\n const viewId = picker.currentView.id;\n const newDate = viewId === 1\n ? addMonths(viewDate, selection - viewDate.getMonth())\n : addYears(viewDate, selection - viewDate.getFullYear());\n\n picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickTodayBtn(datepicker) {\n const picker = datepicker.picker;\n const currentDate = today();\n if (datepicker.config.todayBtnMode === 1) {\n if (datepicker.config.autohide) {\n datepicker.setDate(currentDate);\n return;\n }\n datepicker.setDate(currentDate, {render: false});\n picker.update();\n }\n if (picker.viewDate !== currentDate) {\n picker.changeFocus(currentDate);\n }\n picker.changeView(0).render();\n}\n\nexport function onClickClearBtn(datepicker) {\n datepicker.setDate({clear: true});\n}\n\nexport function onClickViewSwitch(datepicker) {\n switchView(datepicker);\n}\n\nexport function onClickPrevBtn(datepicker) {\n goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextBtn(datepicker) {\n goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n const target = findElementInEventPath(ev, '.datepicker-cell');\n if (!target || target.classList.contains('disabled')) {\n return;\n }\n\n const {id, isMinView} = datepicker.picker.currentView;\n if (isMinView) {\n datepicker.setDate(Number(target.dataset.date));\n } else if (id === 1) {\n goToSelectedMonthOrYear(datepicker, Number(target.dataset.month));\n } else {\n goToSelectedMonthOrYear(datepicker, Number(target.dataset.year));\n }\n}\n\nexport function onClickPicker(datepicker) {\n if (!datepicker.inline && !datepicker.config.disableTouchKeyboard) {\n datepicker.inputField.focus();\n }\n}\n","import {hasProperty, lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today} from '../lib/date.js';\nimport {parseHTML, showElement, hideElement, emptyChildNodes} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {triggerDatepickerEvent} from '../events/functions.js';\nimport {\n onClickTodayBtn,\n onClickClearBtn,\n onClickViewSwitch,\n onClickPrevBtn,\n onClickNextBtn,\n onClickView,\n onClickPicker,\n} from '../events/pickerListeners.js';\n\nfunction processPickerOptions(picker, options) {\n if (options.title !== undefined) {\n if (options.title) {\n picker.controls.title.textContent = options.title;\n showElement(picker.controls.title);\n } else {\n picker.controls.title.textContent = '';\n hideElement(picker.controls.title);\n }\n }\n if (options.prevArrow) {\n const prevBtn = picker.controls.prevBtn;\n emptyChildNodes(prevBtn);\n options.prevArrow.forEach((node) => {\n prevBtn.appendChild(node.cloneNode(true));\n });\n }\n if (options.nextArrow) {\n const nextBtn = picker.controls.nextBtn;\n emptyChildNodes(nextBtn);\n options.nextArrow.forEach((node) => {\n nextBtn.appendChild(node.cloneNode(true));\n });\n }\n if (options.locale) {\n picker.controls.todayBtn.textContent = options.locale.today;\n picker.controls.clearBtn.textContent = options.locale.clear;\n }\n if (options.todayBtn !== undefined) {\n if (options.todayBtn) {\n showElement(picker.controls.todayBtn);\n } else {\n hideElement(picker.controls.todayBtn);\n }\n }\n if (hasProperty(options, 'minDate') || hasProperty(options, 'maxDate')) {\n const {minDate, maxDate} = picker.datepicker.config;\n picker.controls.todayBtn.disabled = !isInRange(today(), minDate, maxDate);\n }\n if (options.clearBtn !== undefined) {\n if (options.clearBtn) {\n showElement(picker.controls.clearBtn);\n } else {\n hideElement(picker.controls.clearBtn);\n }\n }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n const {dates, config} = datepicker;\n const viewDate = dates.length > 0 ? lastItemOf(dates) : config.defaultViewDate;\n return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n const oldViewDate = new Date(picker.viewDate);\n const newViewDate = new Date(newDate);\n const {id, year, first, last} = picker.currentView;\n const viewYear = newViewDate.getFullYear();\n\n picker.viewDate = newDate;\n if (viewYear !== oldViewDate.getFullYear()) {\n triggerDatepickerEvent(picker.datepicker, 'changeYear');\n }\n if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n triggerDatepickerEvent(picker.datepicker, 'changeMonth');\n }\n\n // return whether the new date is in different period on time from the one\n // displayed in the current view\n // when true, the view needs to be re-rendered on the next UI refresh.\n switch (id) {\n case 0:\n return newDate < first || newDate > last;\n case 1:\n return viewYear !== year;\n default:\n return viewYear < first || viewYear > last;\n }\n}\n\nfunction getTextDirection(el) {\n return window.getComputedStyle(el).direction;\n}\n\n// Class representing the picker UI\nexport default class Picker {\n constructor(datepicker) {\n this.datepicker = datepicker;\n\n const template = pickerTemplate.replace(/%buttonClass%/g, datepicker.config.buttonClass);\n const element = this.element = parseHTML(template).firstChild;\n const [header, main, footer] = element.firstChild.children;\n const title = header.firstElementChild;\n const [prevBtn, viewSwitch, nextBtn] = header.lastElementChild.children;\n const [todayBtn, clearBtn] = footer.firstChild.children;\n const controls = {\n title,\n prevBtn,\n viewSwitch,\n nextBtn,\n todayBtn,\n clearBtn,\n };\n this.main = main;\n this.controls = controls;\n\n const elementClass = datepicker.inline ? 'inline' : 'dropdown';\n element.classList.add(`datepicker-${elementClass}`);\n\n processPickerOptions(this, datepicker.config);\n this.viewDate = computeResetViewDate(datepicker);\n\n // set up event listeners\n registerListeners(datepicker, [\n [element, 'click', onClickPicker.bind(null, datepicker), {capture: true}],\n [main, 'click', onClickView.bind(null, datepicker)],\n [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n [controls.prevBtn, 'click', onClickPrevBtn.bind(null, datepicker)],\n [controls.nextBtn, 'click', onClickNextBtn.bind(null, datepicker)],\n [controls.todayBtn, 'click', onClickTodayBtn.bind(null, datepicker)],\n [controls.clearBtn, 'click', onClickClearBtn.bind(null, datepicker)],\n ]);\n\n // set up views\n this.views = [\n new DaysView(this),\n new MonthsView(this),\n new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n ];\n this.currentView = this.views[datepicker.config.startView];\n\n this.currentView.render();\n this.main.appendChild(this.currentView.element);\n datepicker.config.container.appendChild(this.element);\n }\n\n setOptions(options) {\n processPickerOptions(this, options);\n this.views.forEach((view) => {\n view.init(options, false);\n });\n this.currentView.render();\n }\n\n detach() {\n this.datepicker.config.container.removeChild(this.element);\n }\n\n show() {\n if (this.active) {\n return;\n }\n this.element.classList.add('active');\n this.active = true;\n\n const datepicker = this.datepicker;\n if (!datepicker.inline) {\n // ensure picker's direction matches input's\n const inputDirection = getTextDirection(datepicker.inputField);\n if (inputDirection !== getTextDirection(datepicker.config.container)) {\n this.element.dir = inputDirection;\n } else if (this.element.dir) {\n this.element.removeAttribute('dir');\n }\n\n this.place();\n if (datepicker.config.disableTouchKeyboard) {\n datepicker.inputField.blur();\n }\n }\n triggerDatepickerEvent(datepicker, 'show');\n }\n\n hide() {\n if (!this.active) {\n return;\n }\n this.datepicker.exitEditMode();\n this.element.classList.remove('active');\n this.active = false;\n triggerDatepickerEvent(this.datepicker, 'hide');\n }\n\n place() {\n const {classList, style} = this.element;\n const {config, inputField} = this.datepicker;\n const container = config.container;\n const {\n width: calendarWidth,\n height: calendarHeight,\n } = this.element.getBoundingClientRect();\n const {\n left: containerLeft,\n top: containerTop,\n width: containerWidth,\n } = container.getBoundingClientRect();\n const {\n left: inputLeft,\n top: inputTop,\n width: inputWidth,\n height: inputHeight\n } = inputField.getBoundingClientRect();\n let {x: orientX, y: orientY} = config.orientation;\n let scrollTop;\n let left;\n let top;\n\n if (container === document.body) {\n scrollTop = window.scrollY;\n left = inputLeft + window.scrollX;\n top = inputTop + scrollTop;\n } else {\n scrollTop = container.scrollTop;\n left = inputLeft - containerLeft;\n top = inputTop - containerTop + scrollTop;\n }\n\n if (orientX === 'auto') {\n if (left < 0) {\n // align to the left and move into visible area if input's left edge < window's\n orientX = 'left';\n left = 10;\n } else if (left + calendarWidth > containerWidth) {\n // align to the right if canlendar's right edge > container's\n orientX = 'right';\n } else {\n orientX = getTextDirection(inputField) === 'rtl' ? 'right' : 'left';\n }\n }\n if (orientX === 'right') {\n left -= calendarWidth - inputWidth;\n }\n\n if (orientY === 'auto') {\n orientY = top - calendarHeight < scrollTop ? 'bottom' : 'top';\n }\n if (orientY === 'top') {\n top -= calendarHeight;\n } else {\n top += inputHeight;\n }\n\n classList.remove(\n 'datepicker-orient-top',\n 'datepicker-orient-bottom',\n 'datepicker-orient-right',\n 'datepicker-orient-left'\n );\n classList.add(`datepicker-orient-${orientY}`, `datepicker-orient-${orientX}`);\n\n style.top = top ? `${top}px` : top;\n style.left = left ? `${left}px` : left;\n }\n\n setViewSwitchLabel(labelText) {\n this.controls.viewSwitch.textContent = labelText;\n }\n\n setPrevBtnDisabled(disabled) {\n this.controls.prevBtn.disabled = disabled;\n }\n\n setNextBtnDisabled(disabled) {\n this.controls.nextBtn.disabled = disabled;\n }\n\n changeView(viewId) {\n const oldView = this.currentView;\n const newView = this.views[viewId];\n if (newView.id !== oldView.id) {\n this.currentView = newView;\n this._renderMethod = 'render';\n triggerDatepickerEvent(this.datepicker, 'changeView');\n this.main.replaceChild(newView.element, oldView.element);\n }\n return this;\n }\n\n // Change the focused date (view date)\n changeFocus(newViewDate) {\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n this.views.forEach((view) => {\n view.updateFocus();\n });\n return this;\n }\n\n // Apply the change of the selected dates\n update() {\n const newViewDate = computeResetViewDate(this.datepicker);\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n this.views.forEach((view) => {\n view.updateFocus();\n view.updateSelection();\n });\n return this;\n }\n\n // Refresh the picker UI\n render(quickRender = true) {\n const renderMethod = (quickRender && this._renderMethod) || 'render';\n delete this._renderMethod;\n\n this.currentView[renderMethod]();\n }\n}\n","import {isInRange} from '../lib/utils.js';\nimport {addDays, addMonths, addYears, startOfYearPeriod} from '../lib/date.js';\nimport {goToPrevOrNext, switchView, unfocus} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n// - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailablity of the date\n// - args: time value; retun: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n if (!isInRange(date, min, max)) {\n return;\n }\n if (testFn(date)) {\n const newDate = addFn(date, increase);\n return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n }\n return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, ev, direction, vertical) {\n const picker = datepicker.picker;\n const currentView = picker.currentView;\n const step = currentView.step || 1;\n let viewDate = picker.viewDate;\n let addFn;\n let testFn;\n switch (currentView.id) {\n case 0:\n if (vertical) {\n viewDate = addDays(viewDate, direction * 7);\n } else if (ev.ctrlKey || ev.metaKey) {\n viewDate = addYears(viewDate, direction);\n } else {\n viewDate = addDays(viewDate, direction);\n }\n addFn = addDays;\n testFn = (date) => currentView.disabled.includes(date);\n break;\n case 1:\n viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n addFn = addMonths;\n testFn = (date) => {\n const dt = new Date(date);\n const {year, disabled} = currentView;\n return dt.getFullYear() === year && disabled.includes(dt.getMonth());\n };\n break;\n default:\n viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n addFn = addYears;\n testFn = date => currentView.disabled.includes(startOfYearPeriod(date, step));\n }\n viewDate = findNextAvailableOne(\n viewDate,\n addFn,\n direction < 0 ? -step : step,\n testFn,\n currentView.minDate,\n currentView.maxDate\n );\n if (viewDate !== undefined) {\n picker.changeFocus(viewDate).render();\n }\n}\n\nexport function onKeydown(datepicker, ev) {\n if (ev.key === 'Tab') {\n unfocus(datepicker);\n return;\n }\n\n const picker = datepicker.picker;\n const {id, isMinView} = picker.currentView;\n if (!picker.active) {\n switch (ev.key) {\n case 'ArrowDown':\n case 'Escape':\n picker.show();\n break;\n case 'Enter':\n datepicker.update();\n break;\n default:\n return;\n }\n } else if (datepicker.editMode) {\n switch (ev.key) {\n case 'Escape':\n picker.hide();\n break;\n case 'Enter':\n datepicker.exitEditMode({update: true, autohide: datepicker.config.autohide});\n break;\n default:\n return;\n }\n } else {\n switch (ev.key) {\n case 'Escape':\n picker.hide();\n break;\n case 'ArrowLeft':\n if (ev.ctrlKey || ev.metaKey) {\n goToPrevOrNext(datepicker, -1);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, -1, false);\n }\n break;\n case 'ArrowRight':\n if (ev.ctrlKey || ev.metaKey) {\n goToPrevOrNext(datepicker, 1);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, 1, false);\n }\n break;\n case 'ArrowUp':\n if (ev.ctrlKey || ev.metaKey) {\n switchView(datepicker);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, -1, true);\n }\n break;\n case 'ArrowDown':\n if (ev.shiftKey && !ev.ctrlKey && !ev.metaKey) {\n datepicker.enterEditMode();\n return;\n }\n moveByArrowKey(datepicker, ev, 1, true);\n break;\n case 'Enter':\n if (isMinView) {\n datepicker.setDate(picker.viewDate);\n } else {\n picker.changeView(id - 1).render();\n }\n break;\n case 'Backspace':\n case 'Delete':\n datepicker.enterEditMode();\n return;\n default:\n if (ev.key.length === 1 && !ev.ctrlKey && !ev.metaKey) {\n datepicker.enterEditMode();\n }\n return;\n }\n }\n ev.preventDefault();\n ev.stopPropagation();\n}\n\nexport function onFocus(datepicker) {\n if (datepicker.config.showOnFocus && !datepicker._showing) {\n datepicker.show();\n }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n const el = ev.target;\n if (datepicker.picker.active || datepicker.config.showOnClick) {\n el._active = el === document.activeElement;\n el._clicking = setTimeout(() => {\n delete el._active;\n delete el._clicking;\n }, 2000);\n }\n}\n\nexport function onClickInput(datepicker, ev) {\n const el = ev.target;\n if (!el._clicking) {\n return;\n }\n clearTimeout(el._clicking);\n delete el._clicking;\n\n if (el._active) {\n datepicker.enterEditMode();\n }\n delete el._active;\n\n if (datepicker.config.showOnClick) {\n datepicker.show();\n }\n}\n\nexport function onPaste(datepicker, ev) {\n if (ev.clipboardData.types.includes('text/plain')) {\n datepicker.enterEditMode();\n }\n}\n","import {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n const element = datepicker.element;\n if (element !== document.activeElement) {\n return;\n }\n const pickerElem = datepicker.picker.element;\n if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n return;\n }\n unfocus(datepicker);\n}\n","import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport {locales} from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {onKeydown, onFocus, onMousedown, onClickInput, onPaste} from './events/inputFieldListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n return dates\n .map(dt => formatDate(dt, config.format, config.locale))\n .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n const {config, dates: origDates, rangepicker} = datepicker;\n if (inputDates.length === 0) {\n // empty input is considered valid unless origiDates is passed\n return clear ? [] : undefined;\n }\n\n const rangeEnd = rangepicker && datepicker === rangepicker.datepickers[1];\n let newDates = inputDates.reduce((dates, dt) => {\n let date = parseDate(dt, config.format, config.locale);\n if (date === undefined) {\n return dates;\n }\n if (config.pickLevel > 0) {\n // adjust to 1st of the month/Jan 1st of the year\n // or to the last day of the monh/Dec 31st of the year if the datepicker\n // is the range-end picker of a rangepicker\n const dt = new Date(date);\n if (config.pickLevel === 1) {\n date = rangeEnd\n ? dt.setMonth(dt.getMonth() + 1, 0)\n : dt.setDate(1);\n } else {\n date = rangeEnd\n ? dt.setFullYear(dt.getFullYear() + 1, 0, 0)\n : dt.setMonth(0, 1);\n }\n }\n if (\n isInRange(date, config.minDate, config.maxDate)\n && !dates.includes(date)\n && !config.datesDisabled.includes(date)\n && !config.daysOfWeekDisabled.includes(new Date(date).getDay())\n ) {\n dates.push(date);\n }\n return dates;\n }, []);\n if (newDates.length === 0) {\n return;\n }\n if (config.multidate && !clear) {\n // get the synmetric difference between origDates and newDates\n newDates = newDates.reduce((dates, date) => {\n if (!origDates.includes(date)) {\n dates.push(date);\n }\n return dates;\n }, origDates.filter(date => !newDates.includes(date)));\n }\n // do length check always because user can input multiple dates regardless of the mode\n return config.maxNumberOfDates && newDates.length > config.maxNumberOfDates\n ? newDates.slice(config.maxNumberOfDates * -1)\n : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true) {\n const {config, picker, inputField} = datepicker;\n if (mode & 2) {\n const newView = picker.active ? config.pickLevel : config.startView;\n picker.update().changeView(newView).render(quickRender);\n }\n if (mode & 1 && inputField) {\n inputField.value = stringifyDates(datepicker.dates, config);\n }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n let {clear, render, autohide} = options;\n if (render === undefined) {\n render = true;\n }\n if (!render) {\n autohide = false;\n } else if (autohide === undefined) {\n autohide = datepicker.config.autohide;\n }\n\n const newDates = processInputDates(datepicker, inputDates, clear);\n if (!newDates) {\n return;\n }\n if (newDates.toString() !== datepicker.dates.toString()) {\n datepicker.dates = newDates;\n refreshUI(datepicker, render ? 3 : 1);\n triggerDatepickerEvent(datepicker, 'changeDate');\n } else {\n refreshUI(datepicker, 1);\n }\n if (autohide) {\n datepicker.hide();\n }\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n /**\n * Create a date picker\n * @param {Element} element - element to bind a date picker\n * @param {Object} [options] - config options\n * @param {DateRangePicker} [rangepicker] - DateRangePicker instance the\n * date picker belongs to. Use this only when creating date picker as a part\n * of date range picker\n */\n constructor(element, options = {}, rangepicker = undefined) {\n element.datepicker = this;\n this.element = element;\n\n // set up config\n const config = this.config = Object.assign({\n buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n container: document.body,\n defaultViewDate: today(),\n maxDate: undefined,\n minDate: undefined,\n }, processOptions(defaultOptions, this));\n this._options = options;\n Object.assign(config, processOptions(options, this));\n\n // configure by type\n const inline = this.inline = element.tagName !== 'INPUT';\n let inputField;\n let initialDates;\n\n if (inline) {\n config.container = element;\n initialDates = stringToArray(element.dataset.date, config.dateDelimiter);\n delete element.dataset.date;\n } else {\n const container = options.container ? document.querySelector(options.container) : null;\n if (container) {\n config.container = container;\n }\n inputField = this.inputField = element;\n inputField.classList.add('datepicker-input');\n initialDates = stringToArray(inputField.value, config.dateDelimiter);\n }\n if (rangepicker) {\n // check validiry\n const index = rangepicker.inputs.indexOf(inputField);\n const datepickers = rangepicker.datepickers;\n if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n throw Error('Invalid rangepicker object.');\n }\n // attach itaelf to the rangepicker here so that processInputDates() can\n // determine if this is the range-end picker of the rangepicker while\n // setting inital values when pickLevel > 0\n datepickers[index] = this;\n // add getter for rangepicker\n Object.defineProperty(this, 'rangepicker', {\n get() {\n return rangepicker;\n },\n });\n }\n\n // set initial dates\n this.dates = [];\n // process initial value\n const inputDateValues = processInputDates(this, initialDates);\n if (inputDateValues && inputDateValues.length > 0) {\n this.dates = inputDateValues;\n }\n if (inputField) {\n inputField.value = stringifyDates(this.dates, config);\n }\n\n const picker = this.picker = new Picker(this);\n\n if (inline) {\n this.show();\n } else {\n // set up event listeners in other modes\n const onMousedownDocument = onClickOutside.bind(null, this);\n const listeners = [\n [inputField, 'keydown', onKeydown.bind(null, this)],\n [inputField, 'focus', onFocus.bind(null, this)],\n [inputField, 'mousedown', onMousedown.bind(null, this)],\n [inputField, 'click', onClickInput.bind(null, this)],\n [inputField, 'paste', onPaste.bind(null, this)],\n [document, 'mousedown', onMousedownDocument],\n [document, 'touchstart', onMousedownDocument],\n [window, 'resize', picker.place.bind(picker)]\n ];\n registerListeners(this, listeners);\n }\n }\n\n /**\n * Format Date object or time value in given format and language\n * @param {Date|Number} date - date or time value to format\n * @param {String|Object} format - format string or object that contains\n * toDisplay() custom formatter, whose signature is\n * - args:\n * - date: {Date} - Date instance of the date passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {String} formatted date\n * @param {String} [lang=en] - language code for the locale to use\n * @return {String} formatted date\n */\n static formatDate(date, format, lang) {\n return formatDate(date, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * Parse date string\n * @param {String|Date|Number} dateStr - date string, Date object or time\n * value to parse\n * @param {String|Object} format - format string or object that contains\n * toValue() custom parser, whose signature is\n * - args:\n * - dateStr: {String|Date|Number} - the dateStr passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {Date|Number} parsed date or its time value\n * @param {String} [lang=en] - language code for the locale to use\n * @return {Number} time value of parsed date\n */\n static parseDate(dateStr, format, lang) {\n return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n * en`:_English (US)_ is pre-installed.\n */\n static get locales() {\n return locales;\n }\n\n /**\n * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n */\n get active() {\n return !!(this.picker && this.picker.active);\n }\n\n /**\n * @type {HTMLDivElement} - DOM object of picker element\n */\n get pickerElement() {\n return this.picker ? this.picker.element : undefined;\n }\n\n /**\n * Set new values to the config options\n * @param {Object} options - config options to update\n */\n setOptions(options) {\n const picker = this.picker;\n const newOptions = processOptions(options, this);\n Object.assign(this._options, options);\n Object.assign(this.config, newOptions);\n picker.setOptions(newOptions);\n\n refreshUI(this, 3);\n }\n\n /**\n * Show the picker element\n */\n show() {\n if (this.inputField) {\n if (this.inputField.disabled) {\n return;\n }\n if (this.inputField !== document.activeElement) {\n this._showing = true;\n this.inputField.focus();\n delete this._showing;\n }\n }\n this.picker.show();\n }\n\n /**\n * Hide the picker element\n * Not available on inline picker\n */\n hide() {\n if (this.inline) {\n return;\n }\n this.picker.hide();\n this.picker.update().changeView(this.config.startView).render();\n }\n\n /**\n * Destroy the Datepicker instance\n * @return {Detepicker} - the instance destroyed\n */\n destroy() {\n this.hide();\n unregisterListeners(this);\n this.picker.detach();\n if (!this.inline) {\n this.inputField.classList.remove('datepicker-input');\n }\n delete this.element.datepicker;\n return this;\n }\n\n /**\n * Get the selected date(s)\n *\n * The method returns a Date object of selected date by default, and returns\n * an array of selected dates in multidate mode. If format string is passed,\n * it returns date string(s) formatted in given format.\n *\n * @param {String} [format] - Format string to stringify the date(s)\n * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n * selected, empty array in multidate mode and untitled in sigledate mode\n */\n getDate(format = undefined) {\n const callback = format\n ? date => formatDate(date, format, this.config.locale)\n : date => new Date(date);\n\n if (this.config.multidate) {\n return this.dates.map(callback);\n }\n if (this.dates.length > 0) {\n return callback(this.dates[0]);\n }\n }\n\n /**\n * Set selected date(s)\n *\n * In multidate mode, you can pass multiple dates as a series of arguments\n * or an array. (Since each date is parsed individually, the type of the\n * dates doesn't have to be the same.)\n * The given dates are used to toggle the select status of each date. The\n * number of selected dates is kept from exceeding the length set to\n * maxNumberOfDates.\n *\n * With clear: true option, the method can be used to clear the selection\n * and to replace the selection instead of toggling in multidate mode.\n * If the option is passed with no date arguments or an empty dates array,\n * it works as \"clear\" (clear the selection then set nothing), and if the\n * option is passed with new dates to select, it works as \"replace\" (clear\n * the selection then set the given dates)\n *\n * When render: false option is used, the method omits re-rendering the\n * picker element. In this case, you need to call refresh() method later in\n * order for the picker element to reflect the changes. The input field is\n * refreshed always regardless of this option.\n *\n * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n * passed, the method ignores them and applies only valid ones. In the case\n * that all the given dates are invalid, which is distinguished from passing\n * no dates, the method considers it as an error and leaves the selection\n * untouched.\n *\n * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n * objects, time values or mix of those for new selection\n * @param {Object} [options] - function options\n * - clear: {boolean} - Whether to clear the existing selection\n * defualt: false\n * - render: {boolean} - Whether to re-render the picker element\n * default: true\n * - autohide: {boolean} - Whether to hide the picker element after re-render\n * Ignored when used with render: false\n * default: config.autohide\n */\n setDate(...args) {\n const dates = [...args];\n const opts = {};\n const lastArg = lastItemOf(args);\n if (\n typeof lastArg === 'object'\n && !Array.isArray(lastArg)\n && !(lastArg instanceof Date)\n && lastArg\n ) {\n Object.assign(opts, dates.pop());\n }\n\n const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n setDate(this, inputDates, opts);\n }\n\n /**\n * Update the selected date(s) with input field's value\n * Not available on inline picker\n *\n * The input field will be refreshed with properly formatted date string.\n *\n * @param {Object} [options] - function options\n * - autohide: {boolean} - whether to hide the picker element after refresh\n * default: false\n */\n update(options = undefined) {\n if (this.inline) {\n return;\n }\n\n const opts = {clear: true, autohide: !!(options && options.autohide)};\n const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n setDate(this, inputDates, opts);\n }\n\n /**\n * Refresh the picker element and the associated input field\n * @param {String} [target] - target item when refreshing one item only\n * 'picker' or 'input'\n * @param {Boolean} [forceRender] - whether to re-render the picker element\n * regardless of its state instead of optimized refresh\n */\n refresh(target = undefined, forceRender = false) {\n if (target && typeof target !== 'string') {\n forceRender = target;\n target = undefined;\n }\n\n let mode;\n if (target === 'picker') {\n mode = 2;\n } else if (target === 'input') {\n mode = 1;\n } else {\n mode = 3;\n }\n refreshUI(this, mode, !forceRender);\n }\n\n /**\n * Enter edit mode\n * Not available on inline picker or when the picker element is hidden\n */\n enterEditMode() {\n if (this.inline || !this.picker.active || this.editMode) {\n return;\n }\n this.editMode = true;\n this.inputField.classList.add('in-edit');\n }\n\n /**\n * Exit from edit mode\n * Not available on inline picker\n * @param {Object} [options] - function options\n * - update: {boolean} - whether to call update() after exiting\n * If false, input field is revert to the existing selection\n * default: false\n */\n exitEditMode(options = undefined) {\n if (this.inline || !this.editMode) {\n return;\n }\n const opts = Object.assign({update: false}, options);\n delete this.editMode;\n this.inputField.classList.remove('in-edit');\n if (opts.update) {\n this.update(opts);\n }\n }\n}\n","'use strict';\n\nimport { Datepicker } from 'vanillajs-datepicker'; \n\nconst inputElement = document.querySelector('.form-control__input--date');\n\nif ($(inputElement).length > 0) {\n const datepickerDefault = {\n autohide: true,\n startView: 2\n };\n if (inputElement.dataset.milliseconds) {\n const now = new Date();\n const nowTime = new Date(now.getTime() - Number(inputElement.dataset.milliseconds));\n datepickerDefault.maxDate = nowTime;\n delete inputElement.dataset.milliseconds;\n }\n const currentConfig = { ...datepickerDefault, ...inputElement.dataset };\n inputElement.datepicker = new Datepicker(inputElement, currentConfig);\n}","'use strict';\n\nmodule.exports = function (element, message) {\n var errorHtml = '<div class=\"alert alert-danger alert-dismissible ' +\n 'fade show\" role=\"alert\">' +\n '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">' +\n '<span aria-hidden=\"true\">×</span>' +\n '</button>' + message + '</div>';\n\n $(element).append(errorHtml);\n};\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","window.jQuery = window.$ = require('jquery');\nwindow.Swiper = require('swiper8/swiper-bundle');\nlet processInclude = require('base/util');\nconst imagesLoaded = require('imagesloaded');\nimport { gsap } from \"gsap/dist/gsap\";\n\n\n$(document).ready(function () {\n const currentPage = document.querySelector('body').getAttribute('id');\n processInclude(require('./errors-maintenance'));\n // processInclude(require('./components/menu'));\n // processInclude(require('./components/consentTracking'));\n // processInclude(require('./components/footer'));\n // processInclude(require('./components/miniCart'));\n // processInclude(require('./components/collapsibleItem'));\n processInclude(require('./components/search'));\n // processInclude(require('./components/clientSideValidation'));\n // processInclude(require('./components/countrySelector'));\n // processInclude(require('./components/toolTip'));\n //processInclude(require('./productDetail'));\n // processInclude(require('./help/helpNavigation'));\n processInclude(require('core/components/benefitBar'));\n processInclude(require('core/login'));\n processInclude(require('core/components/tile'));\n processInclude(require('./account'));\n processInclude(require('./components/cookiePopup'));\n processInclude(require('./components/customSelect'));\n processInclude(require('./headerSearchBar'));\n processInclude(require('./miniCart'));\n processInclude(require('./registration'));\n processInclude(require('./return/return'));\n\n //processInclude(require('core/registration'));\n // processInclude(require('marni/search'));\n // processInclude(require('marni/search/search'));\n document.querySelector('.main--layout-page > .error-page-404') ? document.querySelector('.main--layout-page').classList.add('error-404') : null;\n processInclude(require('core/components/wishlist'));\n if (currentPage === 'wishlist-show' || currentPage === 'page-homepage') {\n processInclude(require('tealium/tealiumEvents'));\n }\n\n $('.product-display-option').on('click', function(){\n var parent = '#' + this.parentElement.id;\n var lastActiveID = $(parent + ' .last-active')[0].id;\n $(parent + ' .last-active').removeClass('-active');\n $(parent + ' .last-active').removeClass('last-active');\n this.classList.add('-active');\n this.classList.add('last-active');\n if (window.isMobile()) {\n var selectedItem = $(this);\n\n selectedItem[0].scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'center'});\n }\n $(parent + ' #product-display-content-' + lastActiveID)[0].classList.add('hidden');\n $(parent + ' #product-display-content-' + this.id)[0].classList.remove('hidden');\n });\n\n $('.button-chat-benefit').on('click', function(){\n setTimeout(function(){\n if(window._insideGraph){\n window._insideGraph.doEvent(\"chatavailable\", window.insideFrontInterface.getAvailableAssistants() > 0);\n console.log('powerfront re-init');\n if (typeof (insideFrontInterface) != \"undefined\" && insideFrontInterface != null && insideFrontInterface.getAvailableAssistants && insideFrontInterface.getAvailableAssistants().length > 0) {\n $('.contact-us-section').removeClass('live-chat-disabled');\n $('.contact-us-section').addClass('live-chat-enabled');\n } else {\n $('.contact-us-section').removeClass('live-chat-enabled');\n $('.contact-us-section').addClass('live-chat-disabled');\n }\n\n }\n }, 300);\n });\n\n var lastKnownScrollY = 0;\n var currentScrollY = 0;\n var eleHeader = document.getElementsByTagName('header')[0];\n var eleSearch = document.getElementsByClassName('header-search')[0];\n const classes = {\n pinned: 'header-pin',\n unpinned: 'header-unpin',\n };\n function onScroll() {\n currentScrollY = window.pageYOffset;\n if (lastKnownScrollY == 0) {\n pin();\n } else {\n if (currentScrollY >= eleHeader.clientHeight) {\n if (currentScrollY < lastKnownScrollY) {\n pin();\n } else if (currentScrollY > lastKnownScrollY) {\n unpin();\n }\n } else {\n pin();\n }\n }\n lastKnownScrollY = currentScrollY;\n }\n function pin() {\n if ($('.page-template-homepage').length > 0) {\n eleSearch.classList.remove(classes.unpinned);\n eleSearch.classList.add(classes.pinned);\n } else {\n if (eleHeader.classList.contains(classes.unpinned)) {\n eleHeader.classList.remove(classes.unpinned);\n eleHeader.classList.add(classes.pinned);\n if ($('.category-menu-top-container').length > 0) {\n $('.category-menu-top-container')[0].style.top = eleHeader.clientHeight + 'px';\n }\n if ($('.pd-masonry-grid__header').length > 0) {\n $('.pd-masonry-grid__header')[0].style.top = eleHeader.clientHeight + 'px';\n }\n }\n }\n }\n function unpin() {\n if ($('.page-template-homepage').length > 0) {\n eleSearch.classList.remove(classes.pinned);\n eleSearch.classList.add(classes.unpinned);\n } else {\n if (eleHeader.classList.contains(classes.pinned) || !eleHeader.classList.contains(classes.unpinned)) {\n setTimeout(function() {\n eleHeader.classList.remove(classes.pinned);\n eleHeader.classList.add(classes.unpinned);\n }, 200);\n if ($('.category-menu-top-container').length > 0) {\n $('.category-menu-top-container')[0].style.top = 0;\n }\n if ($('.pd-masonry-grid__header').length > 0) {\n $('.pd-masonry-grid__header')[0].style.top = 0;\n }\n }\n }\n }\n\n function handleFooterAccordionToggle(clickedElement) {\n const $clickedBox = $(clickedElement).closest('.section-footer-box');\n $('.section-footer-box').each(function() {\n if ($(this).is($clickedBox)) {\n // Do nothing for the clicked box\n return;\n }\n $(this).removeClass('footer-accordeon-expanded').addClass('footer-accordeon-condensed');\n });\n if ($clickedBox.hasClass('footer-accordeon-expanded')) {\n $clickedBox.removeClass('footer-accordeon-expanded').addClass('footer-accordeon-condensed');\n } else {\n $clickedBox.removeClass('footer-accordeon-condensed').addClass('footer-accordeon-expanded');\n }\n }\n\n $('.button-open-footer').on('click', function() {\n handleFooterAccordionToggle(this);\n });\n\n const tl = gsap.timeline({ paused: true });\n const imageContainers = document.querySelectorAll(\".pd-image-component .image-container-selector\");\n const images = document.querySelectorAll(\".pd-image-component .image-container-selector img\");\n const textBanners = document.querySelectorAll(\".experience-layouts-textBanner\");\n \n gsap.set(imageContainers, { visibility: \"hidden\" });\n gsap.set(images, { opacity: 0, transform: \"translate(0px, -100%)\" });\n gsap.set(textBanners, { visibility: \"hidden\", opacity: 0, transform: \"translate(0px, -100%)\" });\n \n tl.to(imageContainers, { visibility: \"visible\", duration: 0.1 })\n .to(images, { \n opacity: 1, \n transform: \"translate(0px, 0%)\", \n duration: 1.5, \n ease: \"power4.out\", \n stagger: 0.3 \n })\n .to(textBanners, { \n visibility: \"visible\", \n opacity: 1, \n transform: \"translate(0px, 0%)\", \n duration: 1.5, \n ease: \"power4.out\", \n stagger: 0.3 \n }, \"<\");\n \n imagesLoaded('.pd-image-component .image-container-selector', function() {\n tl.play();\n});\n\n var root = document.documentElement;\n root.style.setProperty('--navContainer-maxHeight', window.screen.availHeight + \"px\");\n // set height in a first load\n root.style.setProperty('--navContainer-height', $('header')[0].clientHeight + \"px\");\n\n // // set height if a benefit bar is loaded\n const ro = new ResizeObserver(entries => {\n for (let entry of entries) {\n console.log('height changed!' + entry);\n root.style.setProperty('--navContainer-height', $('header')[0].clientHeight + \"px\");\n }\n });\n\n ro.observe(document.querySelector('header'));\n document.addEventListener('scroll', onScroll, false);\n\n});\nrequire('base/thirdParty/bootstrap');\nrequire('core/components/spinner');","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n let queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName === 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\n this.progress( image, elem, message );\n } );\n };\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount === this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( `progress: ${message}`, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent <picture> or self <img>\n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","'use strict';\n\nvar debounce = require('lodash/debounce');\nvar endpoint = $('.suggestions-wrapper').data('url');\nvar minChars = 2;\nvar UP_KEY = 38;\nvar DOWN_KEY = 40;\nvar DIRECTION_DOWN = 1;\nvar DIRECTION_UP = -1;\nvar lastSearch = '';\n\nfunction searchterms() {\n const url = $('.search-terms').attr('action');\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'html',\n success: function (data) {\n $('.suggestions-wrapper').append('<div class=\"suggestions suggestions-recommender\"><ul class=\"container suggestion-recommender\" role=\"listbox\" id=\"search-results\">' + data + '</ul><div class=\"search-images zero-images\"></div></div>');\n },\n error: function () {\n console.log('error');\n },\n });\n}\n\n/**\n * Retrieves Suggestions element relative to scope\n *\n * @param {Object} scope - Search input field DOM element\n * @return {JQuery} - .suggestions-wrapper element\n */\nfunction getSuggestionsWrapper(scope) {\n return $(scope).siblings('.suggestions-wrapper');\n}\n\n/**\n * Determines whether DOM element is inside the .search-mobile class\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n * @return {boolean} - Whether DOM element is inside div.search-mobile\n */\nfunction isMobileSearch(scope) {\n return !!$(scope).closest('.search-mobile').length;\n}\n\n/**\n * Remove modal classes needed for mobile suggestions\n *\n */\nfunction clearModals() {\n $('body').removeClass('modal-open');\n $('header').siblings().attr('aria-hidden', 'false');\n $('.suggestions').removeClass('modal');\n}\n\n/**\n * Apply modal classes needed for mobile suggestions\n *\n * @param {Object} scope - Search input field DOM element\n */\nfunction applyModals(scope) {\n if (isMobileSearch(scope)) {\n $('body').addClass('modal-open');\n $('header').siblings().attr('aria-hidden', 'true');\n getSuggestionsWrapper(scope).find('.suggestions').addClass('modal');\n }\n}\n\n/**\n * Tear down Suggestions panel\n */\nfunction tearDownSuggestions() {\n $('input.search-field').val('');\n clearModals();\n $('.search-mobile .suggestions').unbind('scroll');\n $('.suggestions-wrapper').empty();\n searchterms();\n}\n\n/**\n * Toggle search field icon from search to close and vice-versa\n *\n * @param {string} action - Action to toggle to\n */\nfunction toggleSuggestionsIcon(action) {\n var mobileSearchIcon = '.search-mobile button.';\n var iconSearch = 'fa-search';\n var iconSearchClose = 'fa-close';\n\n if (action === 'close') {\n $(mobileSearchIcon + iconSearch).removeClass(iconSearch).addClass(iconSearchClose).attr('type', 'button');\n } else {\n $(mobileSearchIcon + iconSearchClose).removeClass(iconSearchClose).addClass(iconSearch).attr('type', 'submit');\n }\n}\n\n/**\n * Determines whether the \"More Content Below\" icon should be displayed\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction handleMoreContentBelowIcon(scope) {\n if (($(scope).scrollTop() + $(scope).innerHeight()) >= $(scope)[0].scrollHeight) {\n $('.more-below').fadeOut();\n } else {\n $('.more-below').fadeIn();\n }\n}\n\n/**\n * Positions Suggestions panel on page\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction positionSuggestions(scope) {\n var outerHeight;\n var $scope;\n var $suggestions;\n var top;\n\n if (isMobileSearch(scope)) {\n $scope = $(scope);\n top = $scope.offset().top;\n outerHeight = $scope.outerHeight();\n $suggestions = getSuggestionsWrapper(scope).find('.suggestions');\n $suggestions.css('top', top + outerHeight);\n\n handleMoreContentBelowIcon(scope);\n\n // Unfortunately, we have to bind this dynamically, as the live scroll event was not\n // properly detecting dynamic suggestions element's scroll event\n $suggestions.scroll(function () {\n handleMoreContentBelowIcon(this);\n });\n }\n}\n\n/**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n * suggestions template contents\n */\nfunction processResponse(response) {\n $('.search-loader').addClass('hidden');\n var $suggestionsWrapper = getSuggestionsWrapper(this.parentElement).empty();\n\n $.spinner().stop();\n\n if (!(typeof (response) === 'object')) {\n $suggestionsWrapper.append(response).show();\n setTimeout(() => {\n $suggestionsWrapper.addClass('animation')\n }, 150);\n $(this).siblings('.reset-button').addClass('d-sm-block');\n positionSuggestions(this);\n\n if (isMobileSearch(this)) {\n toggleSuggestionsIcon('close');\n applyModals(this);\n }\n\n // Trigger screen reader by setting aria-describedby with the new suggestion message.\n var suggestionsList = $('.suggestions .product-recomendation-tile');\n if (suggestionsList.length == 0) {\n $('.header-search').addClass('no-results-in-search');\n window.dispatchEvent(new Event('resize'));\n\n } else {\n $('.header-search').removeClass('no-results-in-search');\n window.dispatchEvent(new Event('resize'));\n }\n $('body').trigger('search:searchKeyword', { suggestions: suggestionsList });\n if ($(suggestionsList).length) {\n $('input.search-field').attr('aria-describedby', 'search-result-count');\n } else {\n $('input.search-field').removeAttr('aria-describedby');\n }\n } else {\n getSuggestionsWrapper(this.parentElement).empty();\n }\n}\n\n/**\n * Retrieve suggestions\n *\n * @param {Object} scope - Search field DOM element\n */\nfunction getSuggestions(scope) {\n var $suggestionsWrapper = getSuggestionsWrapper(scope.parentElement);\n if ($(scope).val().length >= minChars) {\n lastSearch = 'true'\n $.spinner().start();\n $.ajax({\n context: scope,\n url: endpoint + encodeURIComponent($(scope).val()),\n method: 'GET',\n success: processResponse,\n error: function () {\n $.spinner().stop();\n }\n });\n $('.header-search').addClass('hide-recommendations');\n window.dispatchEvent(new Event('resize'));\n $('.search-loader').addClass('d-none');\n } else if ($(scope).val().length <= minChars && lastSearch == 'true'){\n $('.search-loader').addClass('d-none');\n toggleSuggestionsIcon('search');\n $(scope).siblings('.reset-button').removeClass('d-sm-block');\n clearModals();\n $suggestionsWrapper.empty();\n searchterms();\n setTimeout(() => {\n $suggestionsWrapper.addClass('animation')\n }, 200);\n lastSearch = ''\n $('.header-search').removeClass('hide-recommendations');\n $('.header-search').removeClass('no-results-in-search');\n\n window.dispatchEvent(new Event('resize'));\n } else {\n $('.search-loader').addClass('d-none');\n toggleSuggestionsIcon('search');\n $(scope).siblings('.reset-button').removeClass('d-sm-block');\n clearModals();\n $suggestionsWrapper.empty();\n searchterms();\n setTimeout(() => {\n $suggestionsWrapper.addClass('animation')\n }, 200);\n lastSearch = '';\n window.dispatchEvent(new Event('resize'));\n\n }\n}\n\n/**\n * Handle Search Suggestion Keyboard Arrow Keys\n *\n * @param {Integer} direction takes positive or negative number constant, DIRECTION_UP (-1) or DIRECTION_DOWN (+1)\n */\nfunction handleArrow(direction) {\n // get all li elements in the suggestions list\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length === 0) {\n suggestionsList.first().addClass('selected');\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n } else {\n suggestionsList.each(function (index) {\n var idx = index + direction;\n if ($(this).hasClass('selected')) {\n $(this).removeClass('selected');\n $(this).removeAttr('aria-selected');\n if (suggestionsList.eq(idx).length !== 0) {\n suggestionsList.eq(idx).addClass('selected');\n suggestionsList.eq(idx).attr('aria-selected', true);\n $(this).removeProp('aria-selected');\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.eq(idx)[0].id);\n });\n } else {\n suggestionsList.first().addClass('selected');\n suggestionsList.first().attr('aria-selected', true);\n $('input.search-field').each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n }\n return false;\n }\n return true;\n });\n }\n}\n\nmodule.exports = function () {\n $('form[name=\"simpleSearch\"]').submit(function (e) {\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length !== 0) {\n e.preventDefault();\n suggestionsList.filter('.selected').find('a')[0].click();\n }\n });\n\n $('input.search-field').each(function () {\n /**\n * Use debounce to avoid making an Ajax call on every single key press by waiting a few\n * hundred milliseconds before making the request. Without debounce, the user sees the\n * browser blink with every key press.\n */\n var debounceSuggestions = debounce(getSuggestions, 300);\n $(this).on('keyup', function (e) {\n // Capture Down/Up Arrow Key Events\n switch (e.which) {\n case DOWN_KEY:\n handleArrow(DIRECTION_DOWN);\n e.preventDefault(); // prevent moving the cursor\n break;\n case UP_KEY:\n handleArrow(DIRECTION_UP);\n e.preventDefault(); // prevent moving the cursor\n break;\n default:\n if ($('.suggestions-wrapper .search-loader').length == 0 ) {\n $('.suggestions-wrapper').empty().html('<div class=\"search-loader\" style=\"height: 150px; margin: 0 auto;\"><span class=\"button--loading\" style=\"\"></span></div>');\n }\n $('.suggestions-wrapper').removeClass('animation');\n debounceSuggestions(this, e);\n }\n });\n });\n\n $('body').on('click', function (e) {\n if (!$('.suggestions').has(e.target).length && !$(e.target).hasClass('search-field')) {\n // $('.suggestions').hide();\n }\n });\n\n $('body').on('click', '.input-search-container .icon-clear-container', function (e) {\n $('.suggestions-wrapper').removeClass('animation');\n var $suggestionsWrapper = $('.header-search .suggestions-wrapper');\n tearDownSuggestions();\n $('.header-search')[0].classList.remove('hide-recommendations');\n $('.header-search')[0].classList.remove('no-results-in-search');\n setTimeout(() => {\n $suggestionsWrapper.addClass('animation')\n }, 200);\n });\n\n $('body').on('click touchend', '.search-mobile button.fa-close', function (e) {\n e.preventDefault();\n $('.suggestions').hide();\n toggleSuggestionsIcon('search');\n tearDownSuggestions();\n });\n\n $('body').on('click', '.search-load-more-button', function (e) {\n window.location.href = 'https://exampleURL.com/';\n });\n\n $('.site-search .reset-button').on('click', function () {\n $(this).removeClass('d-sm-block');\n });\n\n searchterms();\n\n $(document).ready(() => {\n if ($('.js_current-category-path') &&$('.js_current-category-path')[0] && $('.js_current-category-path')[0].dataset && $('.js_current-category-path')[0].dataset.currentCategoryPath == '[]') {\n $('body').trigger('search:searchResultsPage');\n }\n });\n};\n","document.body.addEventListener('benefit-bar-carousel:init', function () {\n let elementList = document.querySelector('.content-central-benefit-bar');\n let triggerElementList = document.querySelectorAll('.trigger-description-notification');\n\n if (elementList) {\n elementList.addEventListener('click', function () {\n triggerElementList.forEach(function (item) {\n item.classList.toggle('opened');\n });\n });\n }\n\n // Marni Gift Experience Survey container height calc\n const surveyBody = document.getElementById('survey-start');\n if (surveyBody) {\n const isMobile = () => window.innerWidth < 992;\n const landingContainer = document.querySelector('.surveylanding-container');\n \n if(landingContainer && !isMobile()) {\n const mainHeader = document.querySelector('header.header');\n let imgContainer = landingContainer.querySelector('.img-container');\n let actionContainer = landingContainer.querySelector('.actions-container');\n \n let headerHeight = mainHeader.clientHeight;\n imgContainer.setAttribute('style', 'max-height: '+(window.innerHeight-headerHeight)+'px');\n actionContainer.setAttribute('style', 'max-height: '+(window.innerHeight-headerHeight)+'px');\n }\n }\n});\n","'use strict';\n\n/**\n * Handle change of the href by using data-href for the product tiles anchors.\n * @returns {void}\n */\nfunction handleTileLinks() {\n $('body').on('click', '.product-tile .tile-image-link, .product-tile .product-link', function (event) {\n const link = event.currentTarget;\n if (link.dataset.href) {\n const newHref = new URL(link.dataset.href, window.location.origin);\n if (window.location.hash) newHref.searchParams.set('currentPLP', window.location.hash);\n link.setAttribute('href', newHref.toString());\n }\n });\n}\n\nmodule.exports = {\n handleTileLinks: handleTileLinks,\n};\n","function setCookie(name,value,days) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setDate(date.getDate() + days);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n}\n\nmodule.exports = {\n init: function () {\n const launchClass = '.cookie-popup-launch';\n const elements = document.querySelectorAll(launchClass);\n\n if (elements) {\n [...elements].forEach((item) => {\n item.addEventListener('click', (e) => {\n if (utag && utag.gdpr) {\n utag.gdpr.showConsentPreferences();\n }\n });\n });\n }\n },\n onAccept: function() { \n $('.cookies-accept-button, #submitCookieButton, #submitCookieButtonAll, .cookies-modal-popup-content .modal-close').on('click', function () {\n let url = $('.newsletter-layer-url')[0].dataset.newsletterLayer;\n $.ajax({\n url: url,\n method: 'GET',\n success: function (data) {\n console.log('triggerNewsletter');\n $('.newsletter-modal-placeholder')[0].innerHTML = data;\n setTimeout(function() {\n $('#newsletter-modal')[0].ariaHidden = 'false';\n $('#newsletter-modal').addClass('is-open');\n }, 1000);\n\n },\n error: function () {\n console.log('errorNewsletter');\n }\n });\n });\n },\n onClose: function() {\n $('.newsletter-modal-placeholder').on('click', function (e) {\n if (e.target.className == 'modal-close') {\n $('#newsletter-modal')[0].ariaHidden = 'true';\n $('#newsletter-modal').removeClass('is-open');\n }\n });\n },\n onCloseDynamic: function() {\n $('#dynamic-modal .modal-close').on('click', function (e) {\n if (e.target.className == 'modal-close') {\n $('body').removeClass('no-zindex');\n var cookie= $('#dynamic-modal')[0].dataset.popupId;\n setCookie(cookie, true, 30);\n $('#dynamic-modal')[0].ariaHidden = 'true';\n $('#dynamic-modal').removeClass('is-open');\n }\n });\n },\n};\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","const returnChangeType = document.querySelectorAll('.select-return-change-type .radio');\nconst returnReason = document.getElementById('return-reason-option');\nconst returnQuantity = document.getElementById('return-quantity');\nconst keepArticleQuestion = document.getElementById('keep-article-question');\nconst sizeChangeOptions = document.getElementById('size-change-option');\nconst colorChangeOptions = document.getElementById('color-change-option');\n\nif (returnChangeType) {\n returnChangeType.forEach((el) => {\n el.addEventListener('click', (data) => {\n if (returnQuantity) {\n returnQuantity.showReturnQuantity();\n }\n\n showKeepArticleQuestion();\n if (data.target.value) {\n switch (data.target.value) {\n case 'return':\n showReturn();\n break;\n case 'size-change':\n showSizeChange();\n break;\n case 'color-change':\n showColorChange();\n break;\n\n default:\n break;\n }\n }\n });\n });\n}\n\nconst showReturnQuantity = () => returnQuantity.classList.add('show');\nconst showKeepArticleQuestion = () => (keepArticleQuestion ? keepArticleQuestion.classList.add('show') : null);\nconst showReturn = () => {\n hideElements(sizeChangeOptions, colorChangeOptions);\n if (returnReason) {\n returnReason.classList.add('show');\n }\n};\n\nconst showSizeChange = () => {\n hideElements(returnReason, colorChangeOptions);\n sizeChangeOptions.classList.add('show');\n};\n\nconst showColorChange = () => {\n hideElements(returnReason, sizeChangeOptions);\n colorChangeOptions.classList.add('show');\n};\n\nconst hideElements = (el1, el2, el3) => {\n el1 ? el1.classList.remove('show') : null;\n el2 ? el2.classList.remove('show') : null;\n el3 ? el3.classList.remove('show') : null;\n};\n\n// const showElements() = () => {}\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n"],"sourceRoot":""}