b0y-101 Mini Shell


Current Path : E:/www/instructor/teacher08/media/com_eventgallery/dist/
File Upload :
Current File : E:/www/instructor/teacher08/media/com_eventgallery/dist/eventgallery-debug.js.map

{"version":3,"sources":["webpack://eventgallery/./node_modules/@glidejs/glide/dist/glide.modular.esm.js","webpack://eventgallery/./common/js/EventgalleryTools.js","webpack://eventgallery/./common/js/Helpers.js","webpack://eventgallery/./common/js/polyfill/array.from.js","webpack://eventgallery/./common/js/polyfill/element.remove.js","webpack://eventgallery/./eventgallery.js","webpack://eventgallery/./frontend/js/EventgalleryBehavior.js","webpack://eventgallery/./frontend/js/EventgalleryCart.js","webpack://eventgallery/./frontend/js/EventgalleryCheckout.js","webpack://eventgallery/./frontend/js/EventgalleryEventsList.js","webpack://eventgallery/./frontend/js/EventgalleryEventsTiles.js","webpack://eventgallery/./frontend/js/EventgalleryGooglePhotosProcessor.js","webpack://eventgallery/./frontend/js/EventgalleryImage.js","webpack://eventgallery/./frontend/js/EventgalleryImageList.js","webpack://eventgallery/./frontend/js/EventgalleryJSGallery2.js","webpack://eventgallery/./frontend/js/EventgalleryLazyload.js","webpack://eventgallery/./frontend/js/EventgalleryRow.js","webpack://eventgallery/./frontend/js/EventgallerySizeCalculator.js","webpack://eventgallery/./frontend/js/EventgallerySocialShareButton.js","webpack://eventgallery/./frontend/js/EventgallerySquareList.js","webpack://eventgallery/./frontend/js/EventgalleryTilesCollection.js","webpack://eventgallery/./frontend/js/EventgalleryTouch.js","webpack://eventgallery/./frontend/js/Modules.js","webpack://eventgallery/./frontend/js/Overlay.js","webpack://eventgallery/./frontend/js/PhotoSwipeGallery.js","webpack://eventgallery/./frontend/js/PhotoSwipeGallerySlide.js","webpack://eventgallery/./frontend/js/SlideShow.js","webpack://eventgallery/./frontend/js/URLHelper.js","webpack://eventgallery/./frontend/js/glide_modules/anchor.js","webpack://eventgallery/./frontend/js/slider/SliderOptions.js","webpack://eventgallery/./frontend/js/slider/SliderStarter.js","webpack://eventgallery/./frontend/js/slider/SliderTransformator.js","webpack://eventgallery/./frontend/js/utils/ElementSize.js","webpack://eventgallery/./frontend/js/utils/camelCaseConverter.js","webpack://eventgallery/./frontend/js/utils/eventshandler.js","webpack://eventgallery/./frontend/js/utils/units.js","webpack://eventgallery/./photoswipe/photoswipe-ui-default.js","webpack://eventgallery/./photoswipe/photoswipe.js","webpack://eventgallery/./node_modules/core-js/es/array/values.js","webpack://eventgallery/./node_modules/core-js/es/map/index.js","webpack://eventgallery/./node_modules/core-js/es/object/index.js","webpack://eventgallery/./node_modules/core-js/es/symbol/index.js","webpack://eventgallery/./node_modules/core-js/internals/a-function.js","webpack://eventgallery/./node_modules/core-js/internals/a-possible-prototype.js","webpack://eventgallery/./node_modules/core-js/internals/add-to-unscopables.js","webpack://eventgallery/./node_modules/core-js/internals/an-instance.js","webpack://eventgallery/./node_modules/core-js/internals/an-object.js","webpack://eventgallery/./node_modules/core-js/internals/array-includes.js","webpack://eventgallery/./node_modules/core-js/internals/array-iteration.js","webpack://eventgallery/./node_modules/core-js/internals/array-method-has-species-support.js","webpack://eventgallery/./node_modules/core-js/internals/array-species-create.js","webpack://eventgallery/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://eventgallery/./node_modules/core-js/internals/classof-raw.js","webpack://eventgallery/./node_modules/core-js/internals/classof.js","webpack://eventgallery/./node_modules/core-js/internals/collection-strong.js","webpack://eventgallery/./node_modules/core-js/internals/collection.js","webpack://eventgallery/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://eventgallery/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://eventgallery/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://eventgallery/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://eventgallery/./node_modules/core-js/internals/create-property-descriptor.js","webpack://eventgallery/./node_modules/core-js/internals/create-property.js","webpack://eventgallery/./node_modules/core-js/internals/define-iterator.js","webpack://eventgallery/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://eventgallery/./node_modules/core-js/internals/descriptors.js","webpack://eventgallery/./node_modules/core-js/internals/document-create-element.js","webpack://eventgallery/./node_modules/core-js/internals/dom-iterables.js","webpack://eventgallery/./node_modules/core-js/internals/engine-is-node.js","webpack://eventgallery/./node_modules/core-js/internals/engine-user-agent.js","webpack://eventgallery/./node_modules/core-js/internals/engine-v8-version.js","webpack://eventgallery/./node_modules/core-js/internals/entry-unbind.js","webpack://eventgallery/./node_modules/core-js/internals/enum-bug-keys.js","webpack://eventgallery/./node_modules/core-js/internals/export.js","webpack://eventgallery/./node_modules/core-js/internals/fails.js","webpack://eventgallery/./node_modules/core-js/internals/freezing.js","webpack://eventgallery/./node_modules/core-js/internals/function-bind-context.js","webpack://eventgallery/./node_modules/core-js/internals/get-built-in.js","webpack://eventgallery/./node_modules/core-js/internals/get-iterator-method.js","webpack://eventgallery/./node_modules/core-js/internals/global.js","webpack://eventgallery/./node_modules/core-js/internals/has.js","webpack://eventgallery/./node_modules/core-js/internals/hidden-keys.js","webpack://eventgallery/./node_modules/core-js/internals/html.js","webpack://eventgallery/./node_modules/core-js/internals/ie8-dom-define.js","webpack://eventgallery/./node_modules/core-js/internals/indexed-object.js","webpack://eventgallery/./node_modules/core-js/internals/inherit-if-required.js","webpack://eventgallery/./node_modules/core-js/internals/inspect-source.js","webpack://eventgallery/./node_modules/core-js/internals/internal-metadata.js","webpack://eventgallery/./node_modules/core-js/internals/internal-state.js","webpack://eventgallery/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://eventgallery/./node_modules/core-js/internals/is-array.js","webpack://eventgallery/./node_modules/core-js/internals/is-forced.js","webpack://eventgallery/./node_modules/core-js/internals/is-object.js","webpack://eventgallery/./node_modules/core-js/internals/is-pure.js","webpack://eventgallery/./node_modules/core-js/internals/iterate.js","webpack://eventgallery/./node_modules/core-js/internals/iterator-close.js","webpack://eventgallery/./node_modules/core-js/internals/iterators-core.js","webpack://eventgallery/./node_modules/core-js/internals/iterators.js","webpack://eventgallery/./node_modules/core-js/internals/native-symbol.js","webpack://eventgallery/./node_modules/core-js/internals/native-weak-map.js","webpack://eventgallery/./node_modules/core-js/internals/object-assign.js","webpack://eventgallery/./node_modules/core-js/internals/object-create.js","webpack://eventgallery/./node_modules/core-js/internals/object-define-properties.js","webpack://eventgallery/./node_modules/core-js/internals/object-define-property.js","webpack://eventgallery/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://eventgallery/./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://eventgallery/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://eventgallery/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://eventgallery/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://eventgallery/./node_modules/core-js/internals/object-keys-internal.js","webpack://eventgallery/./node_modules/core-js/internals/object-keys.js","webpack://eventgallery/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://eventgallery/./node_modules/core-js/internals/object-prototype-accessors-forced.js","webpack://eventgallery/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://eventgallery/./node_modules/core-js/internals/object-to-array.js","webpack://eventgallery/./node_modules/core-js/internals/object-to-string.js","webpack://eventgallery/./node_modules/core-js/internals/own-keys.js","webpack://eventgallery/./node_modules/core-js/internals/path.js","webpack://eventgallery/./node_modules/core-js/internals/redefine-all.js","webpack://eventgallery/./node_modules/core-js/internals/redefine.js","webpack://eventgallery/./node_modules/core-js/internals/require-object-coercible.js","webpack://eventgallery/./node_modules/core-js/internals/same-value.js","webpack://eventgallery/./node_modules/core-js/internals/set-global.js","webpack://eventgallery/./node_modules/core-js/internals/set-species.js","webpack://eventgallery/./node_modules/core-js/internals/set-to-string-tag.js","webpack://eventgallery/./node_modules/core-js/internals/shared-key.js","webpack://eventgallery/./node_modules/core-js/internals/shared-store.js","webpack://eventgallery/./node_modules/core-js/internals/shared.js","webpack://eventgallery/./node_modules/core-js/internals/string-multibyte.js","webpack://eventgallery/./node_modules/core-js/internals/to-absolute-index.js","webpack://eventgallery/./node_modules/core-js/internals/to-indexed-object.js","webpack://eventgallery/./node_modules/core-js/internals/to-integer.js","webpack://eventgallery/./node_modules/core-js/internals/to-length.js","webpack://eventgallery/./node_modules/core-js/internals/to-object.js","webpack://eventgallery/./node_modules/core-js/internals/to-primitive.js","webpack://eventgallery/./node_modules/core-js/internals/to-string-tag-support.js","webpack://eventgallery/./node_modules/core-js/internals/uid.js","webpack://eventgallery/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://eventgallery/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://eventgallery/./node_modules/core-js/internals/well-known-symbol.js","webpack://eventgallery/./node_modules/core-js/modules/es.array.concat.js","webpack://eventgallery/./node_modules/core-js/modules/es.array.iterator.js","webpack://eventgallery/./node_modules/core-js/modules/es.json.to-string-tag.js","webpack://eventgallery/./node_modules/core-js/modules/es.map.js","webpack://eventgallery/./node_modules/core-js/modules/es.math.to-string-tag.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.assign.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.create.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.define-getter.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.define-properties.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.define-property.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.define-setter.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.entries.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.freeze.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.from-entries.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.get-own-property-names.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.is-extensible.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.is-frozen.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.is-sealed.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.is.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.keys.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.lookup-getter.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.lookup-setter.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.prevent-extensions.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.seal.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.set-prototype-of.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.to-string.js","webpack://eventgallery/./node_modules/core-js/modules/es.object.values.js","webpack://eventgallery/./node_modules/core-js/modules/es.reflect.to-string-tag.js","webpack://eventgallery/./node_modules/core-js/modules/es.string.iterator.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.description.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.has-instance.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.iterator.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.match-all.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.match.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.replace.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.search.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.species.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.split.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.to-primitive.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://eventgallery/./node_modules/core-js/modules/es.symbol.unscopables.js","webpack://eventgallery/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://eventgallery/./node_modules/custom-event-polyfill/polyfill.js","webpack://eventgallery/./frontend/js/Polyfill.ts","webpack://eventgallery/./node_modules/whatwg-fetch/fetch.js","webpack://eventgallery/webpack/bootstrap","webpack://eventgallery/webpack/runtime/compat get default export","webpack://eventgallery/webpack/runtime/define property getters","webpack://eventgallery/webpack/runtime/global","webpack://eventgallery/webpack/runtime/hasOwnProperty shorthand","webpack://eventgallery/webpack/runtime/make namespace object","webpack://eventgallery/webpack/startup"],"names":["defaults","type","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perTouch","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","throttle","direction","peek","breakpoints","classes","ltr","rtl","slider","carousel","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","warn","msg","console","error","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","_extends","assign","arguments","source","hasOwnProperty","call","get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","parent","getPrototypeOf","value","getter","possibleConstructorReturn","self","ReferenceError","toInt","parseInt","isString","isObject","isFunction","isUndefined","isArray","Array","mount","glide","extensions","events","components","name","_name","define","prop","definition","mergeOptions","settings","options","EventsBus","this","hop","event","handler","on","index","push","remove","context","emit","forEach","item","Glide","selector","_c","_t","_e","disabled","transformers","pattern","Run","make","distance","Transition","disable","Move","interval","_o","set","o","_i","_d","status","now","Date","getTime","func","wait","timeout","args","result","previous","later","leading","apply","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","siblings","node","parentNode","n","firstChild","matched","nextSibling","nodeType","exist","window","HTMLElement","TRACK_SELECTOR","EventsBinder","listeners","el","closure","capture","addEventListener","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","Gaps","Grow","Clones","grow","Peeking","Peek","before","Focusing","width","Sizes","slideWidth","supportsPassive","opts","e","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","swipe","Events","Binder","swipeSin","swipeStartX","swipeStartY","passive","Swipe","bindSwipeStart","start","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","move","_Glide$settings","subExSx","subEySy","powEX","Math","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","Html","root","classList","add","end","threshold","swipeDistance","swipeDeg","steps","round","enable","min","resolve","max","unbindSwipeMove","unbindSwipeEnd","_this","wrapper","unbindSwipeStart","off","_this2","_this3","indexOf","changedTouches","destroy","images","Images","bind","dragstart","unbind","preventDefault","anchors","detached","prevented","Anchors","_a","querySelectorAll","click","detach","items","draggable","setAttribute","getAttribute","removeAttribute","attach","after","controls","Controls","_n","addBindings","setActive","addClass","children","removeActive","removeClass","sibling","removeBindings","elements","currentTarget","Keyboard","document","press","keyCode","Autoplay","setInterval","stop","time","clearInterval","slides","sortBreakpoints","points","keys","sort","reduce","r","k","Breakpoints","match","matchMedia","point","matches","COMPONENTS","track","querySelector","slice","filter","slide","contains","_r","t","Translate","transform","TRANSFORMERS","concat","mutate","transformer","mutator","style","isType","isOffset","movement","compose","duration","transition","callback","offset","token","split","join","_v","setupSlides","setupWrapper","dimention","wrapperSize","offsetWidth","reductor","len","marginLeft","marginRight","collect","peekIncrementer","part","floor","clone","cloneNode","_clone","unshift","append","_Components$Html","half","prepend","reverse","appendChild","_i2","insertBefore","_i3","removeChild","Resize","Build","typeClass","activeClass","removeClasses","calculate","isStart","isEnd","countableSteps","_m","step","substr","Glide$1","_Core","Glide$$1","__proto__","subClass","superClass","create","setPrototypeOf","inherits","Eventgallery","eventgallery","jQuery","Tools","mergeObjects","calcBorderWidth","addUrlHashParameter","getUrlHashParameterValue","removeUrlHashParameter","addUrlParameter","removeUrlParameter","setCSSStyle","removeElement","array","elm","splice","properties","sum","j","css","isNaN","initialUrl","fragments","urlpart","hashparts","encodeURIComponent","url","prefix","replace","newHashParts","urlparts","pars","nodes","getParents","parents","parentElement","serializeForm","form","serialized","inputElements","field","selected","checked","from","symbolIterator","toStr","toString","isCallable","fn","maxSafeInteger","pow","toLength","number","Number","isFinite","toInteger","setGetItemHandler","isIterator","next","getArray","T","A","getItem","mapFn","kValue","done","arrayLikeOrIterator","C","Element","require","ready","triggerLazyLoading","EventgalleryLazyload","each","container","$container","$thumbnails","find","rowHeightPercentage","imagesetContainer","first","imageset","initComplete","resizeStart","resizeComplete","trigger","EventsList","eventgalleryTilesCollection","tilesOptions","tiles","tilesContainer","TilesCollection","EventsTiles","adjustMode","$imagesetContainer","rowHeight","data","rowHeightJitter","firstImageRowHeight","doFillLastRow","Imagelist","SquareList","closest","link","attr","location","href","lightbox","PhotoSwipeGallery","initPhotoSwipe","contentId","Overlay","openOverlay","getElementById","innerHTML","EventGalleryLightboxConfiguration","doPreventRightClick","GooglePhotosProcessor","dispatchEvent","Polyfill","sliderElements","sliderStarter","SliderStarter","timer","Cart","newOptions","cart","isMultiline","buttonShowType","emptyCartSelector","cartSelector","cartItemContainerSelector","cartItemsSelector","cartItemSelector","cartCountSelector","buttonDownSelector","buttonUpSelector","cartItemsMinHeight","removeUrl","add2cartUrl","getCartUrl","removeLinkTitle","initialize","slideUp","animate","height","slideDown","proxy","$document","updateQuantity","openCart","quantityPlus","quantityMinus","removeFromCart","populateCart","updateCart","EventGalleryCartConfiguration","add2carturl","$button","tagName","updateCartItemContainer","y","currentObject","posY","position","top","down","up","linksOnly","cartHTML","html","id","folder","file","count","imagetag","lineitemid","reload","getJSON","json","doRequest","$inputFild","quantity","val","fieldName","inputField","currentVal","maxOrderQuantity","change","linkElement","iconElement","log","countryId","selectedIndex","stateId","stateField","optGroups","optGroup","display","switchStates","processList","ceil","setSize","newHeight","newWidth","LOADING_MATCHER","MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE","albumUrl","albumsUrl","EventGalleryGooglePhotosConfiguration","imageAddedCallback","processImages","doReloadLightbox","detail","isOverlay","albums","_groupByAlbum","_collectHTMLElements","_markImagesAsInProgress","_getMainImageDataFromServer","htmlCollection","getElementsByTagName","img","backgroundImage","dataSrc","src","foundLinkHTMLElements","a","rel","parsedHTMLElement","getHTMLElement","htmlElements","Map","imageHTMLElement","_parseHTMLElement","updateParameters","parameters","htmlElement","ParsedImageHTMLElement","ParsedLinkHTMLElement","foldername","album","_doAlbumRequest","fetch","then","response","_processAlbumResult","_replaceImages","albumsWithMainImagesOnly","_filterForAlbumsWithMainImageOnly","size","_doAlbumsRequest","_getAlbumDataFromServer","_processAlbumsResult","newAlbums","mainImages","image","isMainImage","serverResult","parsedImageHTMLElement","imageUrl","getFile","replaceElementLinks","isOpen","getCurrentSlide","thumbnailContainer","_gallery","close","ParsedHTMLElement","attributeNames","Set","styleAttributeNames","parameterString","substring","URLHelper","updateParametersWithUrl","getImageUrl","getWidth","Image","tag","calculatedWidth","calcSize","glueLeft","glueRight","glueTop","glueBottom","getImageTagHeight","getComputedStyle","ratio","sizeCalculator","SizeCalculator","backgroundImageStyle","secret","secret_o","secret_h","secret_k","farm","server","getFlickrURL","googleWidth","getSize","adjustImageURL","minImageWidth","eventgalleryPageWidth","images_tags","eventgalleryTimer","new_width","getRowWidth","rowWidth","imagesToProcess","shift","imageHeight","imageWidth","rowHeightForRightSideImages","maxWidth","maxHeight","adjustHeight","generateRows","heightJitter","numberOfRowsToCreate","finalRows","currentRow","Row","processRow","isLastRow","JSGallery2","thumbs","bigImageContainer","pageContainer","pages","running","currentPageNumber","blockKeys","imagesPerFirstPage","imagesPerPage","bigImage","convertThumbs","lastPage","initialIndex","createControls","createGallerySlides","gotoPage","unBlockKeys","selectByIndex","thumbContainer","lightboxLinkElement","title","decodeURIComponent","w","h","prevLink","prevImage","mouseleave","mouseLeaveHandler","mouseover","focusControl","zoomLink","nextLink","nextImage","showBigImage","showCartButton","add2cartLink","showCartConnector","cartConnectorLink","cartConnectorLinkRel","showSocialMediaButton","socialmediabutton","SocialShareButton","openShareDialog","keydown","keyboardHandler","swipeleft","swiperight","Touch","addTouch","touchContainerSelector","control","getDistanceToMouse","element","s","xDiff","clientX","left","yDiff","clientY","resetThumbs","select","selectedContainer","convertThumb","forceReload","deselect","history","pushState","targetPage","setImage","newSrc","currentIndex","openPhotoSwipe","setAfterChangeEventListener","gid","getCurrentIndex","gotoSlide","titleTarget","prevPage","nextPage","zoomImage","pageNumber","selectImage","page","updateHandles","prevHandle","fadeOut","fadeIn","nextHandle","countHandle","updatePagingBar","currentPage","pageCount","createCountLink","pageSpeed","skipFromRight","skipFromLeft","spaceToRight","gallery","myAnchor","myListItem","elementSelector","classForLoaded","classForLoading","IntersectionObserverEntry","intersectionRatio","imageObserver","IntersectionObserver","entries","imgObserver","entry","isIntersecting","lazyImage","dataset","createBackgroundImageUrl","knownImageUrls","includes","createElement","onload","backgroundImageUrl","lazyImages","observe","random","eventgalleryImage","addThisImage","gapToClose","availableSizes","flickrSizes","100","240","320","500","640","800","1024","1600","2048","originalwidth","originalheight","longSideSize","originalLongSideSize","sizeCode","secretString","minSizes","getMinSizes","heightOkay","lastItem","boxWidth","boxHeight","originalWidth","originalHeight","DownloadButton","download","body","ClickableButton","targetPos","myDiv","load","closeFunction","closeFunction2","mouseenter","tilesPerRow","tile","columnHeight","columnWidth","outerWidth","$tile","outerHeight","smallestColumn","getSmallestColumn","getHighestColumn","smallestColumnValue","smallestColumnNumber","columnValue","columnNumber","removeTouch","leftAction","rightAction","tabAction","allowScrolling","hDistance","vDistance","hDistanceLast","vDistanceLast","vSwipe","hSwipe","startCoords","endCoords","innerWidth","$","innerHeight","originalEvent","targetTouches","background","onClosed","onLoad","repositionTimer","windowWidth","onResizeOverlay","_setRositionTimer","dataUrl","opacity","closeOverlay","reposition","startsWith","_getRemoteData","_addContent","force","content","insertAndExecute","getElementsByClassName","clientWidth","offsetHeight","scrollTop","pageYOffset","newContent","scripts","eval","text","_isOpen","tc","thumbnailContainerIsAllowed","input","KEY_CLOSE","KEY_SHARE","KEY_DOWNLOAD","KEY_BUY","KEY_ZOOM","KEY_PREVIOUS","KEY_NEXT","KEY_FULLSCREEN","KEY_PLAYSLIDESHOW","KEY_PAUSESLIDESHOW","controllElements","div","_parseHashString","hash","params","vars","pair","pid","PhotoSwipeGallerySlide","getGalleries","values","l","map","galleries","thumbnails","getThumbnailContainers","parseThumbnailElement","returnValue","eTarget","srcElement","clickedListItem","toUpperCase","getSlideBy","getIndexOfSlide","disableAnimation","fromURL","pswpElement","galleryPIDs","galleryUID","shareEl","downloadEl","add2cartEl","getThumbBoundsFn","x","thumbnail","pageYScroll","documentElement","rect","getBoundingClientRect","overlayClass","pinchToClose","closeOnVerticalDrag","closeOnScroll","navigationFadeDelay","timeToIdle","timeToIdleOutside","showAnimationDuration","PhotoSwipe","PhotoSwipeUIDefault","init","initSlideShow","listen","appendControlls","_registerClickEvents","hashData","parseHash","onclick","onThumbnailsClick","currItem","afterChangeFunction","goTo","pop","invalidateCurrItems","updateSize","doUseSlideshow","slideShow","SlideShow","setDelay","slideshowSpeed","doUseAutoplay","toggleSlideShowState","eventName","msrc","photoSwipeGallery","_photoSwipeGallery","_SlideShow_Running","_currentTimer","_SlideShow_Delay","_SlideShow_Button","interactionHandler","ontouchstart","_planNextSwitch","_stopSlideshow","_adjustNavigation","delay","_startSlideshow","isForTheFirstSwitch","_nextSlide","nextSlide","urlParameterString","pairs","splittedPair","urlSring","parts","queryParts","parseURLParameter","urlString","EventsHandler","SliderOptions","slidesElementsSelector","numberOfRowsPerSlide","showNav","_parseOptions","attributes","CamelCaseConverter","sourceGroupElement","sliderTransformator","sliderOptions","_loadOptions","sourceElementSelector","getSlidesElementsSelector","getAutoPlay","doShowNav","numberOfItemsPerSlide","ElementSize","getNumberOfRowsPerSlide","SliderTransformator","rootElement","Anchor","sliderRootSelector","sourceElements","getSourceElements","sliderRoot","sliderMarkup","createRange","createContextualFragment","controlElement","sliderGroupElement","currentSliderElement","className","domRect","computedStyle","containerElement","numberOfRows","getOuterWidth","str","m","isNodeList","listener","NodeList","isPrototypeOf","pswp","framework","_fullscrenAPI","_controls","_captionContainer","_fakeCaptionContainer","_indexIndicator","_shareButton","_shareModal","_add2cartButton","_add2cartOverlay","_initalCloseOnScrollValue","_isIdle","_listen","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_galleryHasOneSlide","_options","_blockControlsTap","_idleInterval","_idleTimer","ui","_overlayUIUpdated","_controlsVisible","_shareModalHidden","_add2cartModalHidden","_defaultUIOptions","barsSize","bottom","closeElClasses","loadingIndicatorDelay","addCaptionHTMLFn","captionEl","closeEl","fullscreenEl","zoomEl","counterEl","arrowEl","preloaderEl","tapToClose","tapToToggleControls","clickToCloseNonZoomable","shareButtons","label","getImageURLForShare","getPageURLForShare","getTextForShare","indexIndicatorSep","fitControlsWidth","_onControlsTap","mouseUsed","_onIdleMouseMove","uiElement","found","clickedClass","_uiElements","onTap","tapDelay","features","isOldAndroid","_togglePswpClass","cName","_countNumItems","hasOneSlide","getNumItemsFn","_toggleShareModalClass","_toggleShareModal","_updateShareURLs","_toggleAdd2cartModal","isFullscreen","exit","_updateAdd2cartContent","sharingButtons","sharingButton","add2cartButtons","add2cartButton","_hasCloseClass","hasClass","_idleIncrement","setIdle","_onMouseLeaveWindow","relatedTarget","toElement","nodeName","_toggleLoadingIndicator","hide","_applyNavBarGaps","vGap","likelyTouchDevice","screen","bars","createEl","captionSize","clientHeight","option","onInit","shout","downloadButtons","toggleDesktopZoom","prev","enter","pinchControlsHidden","extend","getChildByClass","scrollWrap","hideControls","showControls","update","initialZoomLevel","getZoomLevel","zoomTo","getDoubleTapZoom","isDown","preventObj","test","prevent","onGlobalTap","onMouseOver","eventK","updateFullscreen","hideAnimationDuration","classAttr","loopThroughChildElements","sChildren","topBar","_setupUIElements","getFullscreenAPI","template","loading","allowProgressiveImg","naturalWidth","isIdle","updateIndexIndicator","setScrollOffset","getScrollY","pointerType","fitRatio","releasePoint","supportsFullscreen","d","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","tF","requestFullscreen","enterK","exitK","elementK","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","ALLOW_KEYBOARD_INPUT","UiClass","methodName","yOffset","reg","RegExp","parentEl","childClassName","arraySearch","o1","o2","preventOverwrite","easing","sine","out","sin","inOut","cos","cubic","detectFeatures","helperStyle","vendor","oldIE","all","touch","requestAnimationFrame","raf","caf","cancelAnimationFrame","pointerEvent","PointerEvent","navigator","msPointerEnabled","ua","userAgent","platform","v","appVersion","isOldIOSPhone","androidversion","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","vendors","charAt","toLowerCase","lastTime","currTime","timeToCall","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","allowPanToNext","spacing","bgOpacity","loop","verticalDragRange","showHideOpacity","focus","escKey","arrowKeys","mainScrollEndFriction","panEndFriction","isClickableElement","isMouseClick","maxSpreadZoom","modal","scaleMode","_isDestroying","_closedByScroll","_currentItemIndex","_containerStyle","_containerShiftIndex","_upMoveEvents","_downEvents","_globalEventHandlers","_currZoomLevel","_startZoomLevel","_translatePrefix","_translateSufix","_updateSizeInterval","_itemsNeedUpdate","_itemHolders","_prevItemIndex","_dragStartEvent","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_transformKey","_pointerEventEnabled","_likelyTouchDevice","_requestAF","_cancelAF","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_features","_orientationChangeTimeout","_gestureStartTime","_gestureCheckSpeedTime","_releaseAnimData","_isZoomingIn","_verticalDragInitiated","_oldAndroidTouchEndTimeout","_isDragging","_isMultitouch","_zoomStarted","_moved","_dragAnimFrame","_mainScrollShifted","_currentPoints","_isZooming","_startPointsDistance","_currPanBounds","_currZoomElementStyle","_mainScrollAnimating","_direction","_isFirstMove","_opacityChanged","_bgOpacity","_wasOverInitialZoom","_tempCounter","_currPanDist","_startPanOffset","_panOffset","_viewportSize","_currPositionIndex","_offset","_slideSize","_indexDiff","_isFixedPosition","_modules","_windowVisibleSize","_renderMaxResolution","_registerModule","module","publicMethods","_getLoopedId","numSlides","_getNumItems","_listeners","_shout","_getCurrentTime","_applyBgOpacity","bg","_applyZoomTransform","styleObj","zoom","_applyCurrentZoomPan","allowRenderResolution","_setImageSize","_applyZoomPanToItem","initialPosition","_setTranslateX","elStyle","_moveMainScroll","newSlideIndexOffset","delta","_mainScrollPos","_calculatePanOffset","axis","zoomLevel","_midZoomPoint","_equalizePoints","p1","p2","_roundPoint","p","_mouseMoveTimeout","_onFirstMouseMove","_calculatePanBounds","bounds","_calculateItemSize","_getMinZoomLevel","_getMaxZoomLevel","_modifyDestPanOffset","destPanBounds","destPanOffset","destZoomLevel","_onKeyDown","keydownAction","ctrlKey","altKey","shiftKey","metaKey","_onGlobalClick","_updatePageScrollOffset","_animations","_numAnimations","_stopAnimation","_registerStartAnimation","_stopAllAnimations","_animateProp","b","endProp","easingFn","onUpdate","onComplete","startAnimTime","animloop","viewportSize","isMainScrollAnimating","isDragging","isZooming","applyZoomPan","panX","panY","itemHolders","wrap","allow3dTransform","perspective","zoomRatio","_setupTransforms","resize","orientationchange","scroll","oldPhone","animationName","_getItemAt","rootClasses","mainClass","setContent","updateCurrItem","_showOrHide","_showOrHideTimeout","_stopDragUpdateLoop","panTo","diff","updateCurrZoomItem","emulateSetContent","zoomElement","center","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","prevItem","windowScrollY","holder","hIndex","cleanSlide","centerPoint","speed","updateFn","initialPanOffset","_currPoint","_startPoint","_currPointers","_startMainScrollPos","_posPoints","_tempPoint","_currZoomedItemIndex","_centerPoint","_lastReleaseTime","_currCenterPoint","_calculatePointsDistance","_dragUpdateLoop","_renderMovement","_closestElement","_preventObj","_preventDefaultEventBehaviour","_convertTouchToPoint","identifier","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_ePoint1","_ePoint2","_tempPointsArr","_getTouchPoints","_panOrMoveMainScroll","panFriction","startOverDiff","newPanPos","newMainScrollPos","newOffset","dir","newMainScrollPosition","mainScrollDiff","_onDragStart","button","_initialZoomRunning","pointerIndex","pointerId","startPointsList","numPoints","_onDragMove","touchesList","_isEqualPoints","pointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","percent","opacityRatio","_pushPosPoint","_onDragRelease","4","2","3","gestureType","touchList","releaseTimeDiff","_initDragReleaseAnimationData","calculateSwipeSpeed","initalPanY","initialBgOpacity","_finishSwipeMainScrollGesture","_completePanGesture","_completeZoomGesture","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","speedDecelerationRatioAbs","distanceOffset","backAnimDestination","backAnimStarted","calculateOverBoundsAnimOffset","pos","calculateAnimOffset","timeDiff","panAnimLoop","zoomPan","lastNow","animData","itemChanged","itemsDiff","nextCircle","totalShiftDist","isFastLastFlick","finishAnimDuration","animateToX","animateToDist","touchesDistance","initialOpacity","initGestures","addEventNames","pref","maxTouchPoints","msMaxTouchPoints","mousedown","mousemove","mouseup","_items","_initialContentSet","completeFn","thumbBounds","initialLayout","closeWithRaf","fadeEverything","loadError","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_imagesToAppendPool","_controllerDefaultOptions","errorMsg","forceProgressiveLoading","preload","isInitial","hRatio","vRatio","realPanElementW","realPanElementH","_calculateSingleItemPanBounds","_appendImage","baseDiv","preventAnimation","keepPlaceholder","imageAppended","loaded","placeholder","_preloadImage","loadComplete","onerror","_checkForError","cleanUp","maxRes","lastChild","_appendImagesPool","poolItem","clearPlaceholder","lazyLoadItem","initController","getItemAt","isNext","preloadBefore","preloadAfter","preloader","placeholderClassName","tapTimer","_wheelDelta","tapReleasePoint","_dispatchTapEvent","origEvent","createEvent","eDetail","initCustomEvent","initTap","onTapStart","onTapRelease","touch0","touch1","p0","initDesktopZoom","setupDesktopZoom","handleMouseWheel","mouseZoomedIn","hasDraggingClass","updateZoomable","removeDraggingClass","deltaY","deltaMode","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","newPanX","newPanY","doubleTapZoomLevel","zoomOut","_historyUpdateTimeout","_hashChangeTimeout","_hashAnimCheckTimeout","_hashChangedByScript","_hashChangedByHistory","_hashReseted","_initialHash","_historyChanged","_closedFromURL","_urlChangedOnce","_windowLoc","_supportsPushState","_historyDefaultOptions","_getHash","_cleanHistoryTimeouts","_parseItemIndexFromURL","searchfor","_updateHash","newHash","newURL","initHistory","updateURL","onHashChange","returnToOriginal","back","pathname","search","entryUnbind","exports","path","it","String","wellKnownSymbol","definePropertyModule","UNSCOPABLES","ArrayPrototype","f","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","O","IndexedObject","toObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","callbackfn","that","specificCreate","boundFunction","some","every","findIndex","filterOut","fails","V8_VERSION","SPECIES","METHOD_NAME","foo","Boolean","originalArray","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tryGet","callee","redefineAll","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getterFor","getConstructor","CONSTRUCTOR_NAME","ADDER","iterable","last","AS_ENTRIES","getInternalState","state","getEntry","removed","clear","has","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","global","isForced","redefine","InternalMetadataModule","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","KEY","nativeMethod","REQUIRED","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","forced","ownKeys","getOwnPropertyDescriptorModule","F","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","NAME","bitmap","toPrimitive","propertyKey","createIteratorConstructor","createNonEnumerableProperty","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","proto","wrappedWellKnownSymbolModule","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classof","process","getBuiltIn","version","versions","v8","CONSTRUCTOR","METHOD","setGlobal","copyConstructorProperties","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","isExtensible","preventExtensions","aFunction","c","variable","namespace","method","check","globalThis","g","propertyIsEnumerable","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","hiddenKeys","uid","FREEZING","METADATA","setMetadata","objectID","weakData","meta","getWeakData","onFreeze","NATIVE_WEAK_MAP","objectHas","shared","sharedKey","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","enforce","arg","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","anObject","isArrayIteratorMethod","getIteratorMethod","iteratorClose","Result","stopped","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","condition","callFn","returnMethod","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","IS_NODE","getOwnPropertySymbols","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","B","symbol","alphabet","chr","argumentsLength","S","activeXDocument","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","temp","parentWindow","NullProtoObjectViaActiveX","contentWindow","open","Properties","IE8_DOM_DEFINE","$defineProperty","P","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getOwnPropertyNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","1","V","__defineSetter__","aPossiblePrototype","setter","CORRECT_SETTER","TO_ENTRIES","getOwnPropertyNamesModule","enforceInternalState","TEMPLATE","unsafe","simple","TAG","SHARED","mode","copyright","requireObjectCoercible","CONVERT_TO_STRING","second","charCodeAt","codeAt","integer","argument","PREFERRED_STRING","valueOf","postfix","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","createProperty","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","addToUnscopables","ARRAY_ITERATOR","Arguments","JSON","collection","collectionStrong","__defineGetter__","$entries","$freeze","freeze","fromEntries","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","getOwnPropertyDescriptors","nativeGetPrototypeOf","$isExtensible","$isFrozen","isFrozen","$isSealed","isSealed","nativeKeys","__lookupGetter__","__lookupSetter__","$preventExtensions","$seal","seal","$values","Reflect","STRING_ITERATOR","defineWellKnownSymbol","NativeSymbol","description","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","regexp","nativeObjectCreate","getOwnPropertyNamesExternal","$forEach","HIDDEN","SYMBOL","TO_PRIMITIVE","$Symbol","$stringify","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","isSymbol","$defineProperties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","stringify","replacer","space","$replacer","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","ce","CustomEvent","cancelable","defaultPrevented","Error","evt","origPrevent","bubbles","Event","removeHtmlElementNode","createNewEvent","initEvent","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","normalizeName","normalizeValue","iteratorFor","Headers","headers","header","consumed","bodyUsed","Promise","reject","fileReaderReady","reader","readBlobAsArrayBuffer","blob","FileReader","promise","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","rejected","arrayBuffer","byteOffset","readAsText","chars","fromCharCode","readArrayBufferAsText","formData","decode","parse","oldValue","thisArg","Request","upcased","credentials","signal","referrer","cache","reParamSearch","trim","bytes","Response","bodyInit","ok","statusText","redirectStatuses","redirect","RangeError","DOMException","err","message","stack","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","rawHeaders","getAllResponseHeaders","line","responseURL","responseText","ontimeout","onabort","fixUrl","withCredentials","responseType","setRequestHeader","onreadystatechange","readyState","send","polyfill","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","__esModule","toStringTag"],"mappings":"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","file":"eventgallery-debug.js","sourcesContent":["/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek <jedrzej.chalubek@gmail.com> (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\n\nvar defaults = {\n  /**\n   * Type of the movement.\n   *\n   * Available types:\n   * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n   * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n   *\n   * @type {String}\n   */\n  type: 'slider',\n\n  /**\n   * Start at specific slide number defined with zero-based index.\n   *\n   * @type {Number}\n   */\n  startAt: 0,\n\n  /**\n   * A number of slides visible on the single viewport.\n   *\n   * @type {Number}\n   */\n  perView: 1,\n\n  /**\n   * Focus currently active slide at a specified position in the track.\n   *\n   * Available inputs:\n   * `center` - Current slide will be always focused at the center of a track.\n   * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n   *\n   * @type {String|Number}\n   */\n  focusAt: 0,\n\n  /**\n   * A size of the gap added between slides.\n   *\n   * @type {Number}\n   */\n  gap: 10,\n\n  /**\n   * Change slides after a specified interval. Use `false` for turning off autoplay.\n   *\n   * @type {Number|Boolean}\n   */\n  autoplay: false,\n\n  /**\n   * Stop autoplay on mouseover event.\n   *\n   * @type {Boolean}\n   */\n  hoverpause: true,\n\n  /**\n   * Allow for changing slides with left and right keyboard arrows.\n   *\n   * @type {Boolean}\n   */\n  keyboard: true,\n\n  /**\n   * Stop running `perView` number of slides from the end. Use this\n   * option if you don't want to have an empty space after\n   * a slider. Works only with `slider` type and a\n   * non-centered `focusAt` setting.\n   *\n   * @type {Boolean}\n   */\n  bound: false,\n\n  /**\n   * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n   *\n   * @type {Number|Boolean}\n   */\n  swipeThreshold: 80,\n\n  /**\n   * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n   *\n   * @type {Number|Boolean}\n   */\n  dragThreshold: 120,\n\n  /**\n   * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n   *\n   * @type {Number|Boolean}\n   */\n  perTouch: false,\n\n  /**\n   * Moving distance ratio of the slides on a swiping and dragging.\n   *\n   * @type {Number}\n   */\n  touchRatio: 0.5,\n\n  /**\n   * Angle required to activate slides moving on swiping or dragging.\n   *\n   * @type {Number}\n   */\n  touchAngle: 45,\n\n  /**\n   * Duration of the animation in milliseconds.\n   *\n   * @type {Number}\n   */\n  animationDuration: 400,\n\n  /**\n   * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n   *\n   * @type {Boolean}\n   */\n  rewind: true,\n\n  /**\n   * Duration of the rewinding animation of the `slider` type in milliseconds.\n   *\n   * @type {Number}\n   */\n  rewindDuration: 800,\n\n  /**\n   * Easing function for the animation.\n   *\n   * @type {String}\n   */\n  animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n  /**\n   * Throttle costly events at most once per every wait milliseconds.\n   *\n   * @type {Number}\n   */\n  throttle: 10,\n\n  /**\n   * Moving direction mode.\n   *\n   * Available inputs:\n   * - 'ltr' - left to right movement,\n   * - 'rtl' - right to left movement.\n   *\n   * @type {String}\n   */\n  direction: 'ltr',\n\n  /**\n   * The distance value of the next and previous viewports which\n   * have to peek in the current view. Accepts number and\n   * pixels as a string. Left and right peeking can be\n   * set up separately with a directions object.\n   *\n   * For example:\n   * `100` - Peek 100px on the both sides.\n   * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n   *\n   * @type {Number|String|Object}\n   */\n  peek: 0,\n\n  /**\n   * Collection of options applied at specified media breakpoints.\n   * For example: display two slides per view under 800px.\n   * `{\n   *   '800px': {\n   *     perView: 2\n   *   }\n   * }`\n   */\n  breakpoints: {},\n\n  /**\n   * Collection of internally used HTML classes.\n   *\n   * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n   * @type {Object}\n   */\n  classes: {\n    direction: {\n      ltr: 'glide--ltr',\n      rtl: 'glide--rtl'\n    },\n    slider: 'glide--slider',\n    carousel: 'glide--carousel',\n    swipeable: 'glide--swipeable',\n    dragging: 'glide--dragging',\n    cloneSlide: 'glide__slide--clone',\n    activeNav: 'glide__bullet--active',\n    activeSlide: 'glide__slide--active',\n    disabledArrow: 'glide__arrow--disabled'\n  }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param  {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n  console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n  return parseInt(value);\n}\n\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toFloat(value) {\n  return parseFloat(value);\n}\n\n/**\n * Indicates whether the specified value is a string.\n *\n * @param  {*}   value\n * @return {Boolean}\n */\nfunction isString(value) {\n  return typeof value === 'string';\n}\n\n/**\n * Indicates whether the specified value is an object.\n *\n * @param  {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction isObject(value) {\n  var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n  return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n\n/**\n * Indicates whether the specified value is a number.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isNumber(value) {\n  return typeof value === 'number';\n}\n\n/**\n * Indicates whether the specified value is a function.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\n\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n\n/**\n * Indicates whether the specified value is an array.\n *\n * @param  {*} value\n * @return {Boolean}\n */\nfunction isArray(value) {\n  return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\nfunction mount(glide, extensions, events) {\n  var components = {};\n\n  for (var name in extensions) {\n    if (isFunction(extensions[name])) {\n      components[name] = extensions[name](glide, components, events);\n    } else {\n      warn('Extension must be a function');\n    }\n  }\n\n  for (var _name in components) {\n    if (isFunction(components[_name].mount)) {\n      components[_name].mount();\n    }\n  }\n\n  return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param  {Object} obj         Object where property has to be defined.\n * @param  {String} prop        Name of the defined property.\n * @param  {Object} definition  Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n  Object.defineProperty(obj, prop, definition);\n}\n\n/**\n * Sorts aphabetically object keys.\n *\n * @param  {Object} obj\n * @return {Object}\n */\nfunction sortKeys(obj) {\n  return Object.keys(obj).sort().reduce(function (r, k) {\n    r[k] = obj[k];\n\n    return r[k], r;\n  }, {});\n}\n\n/**\n * Merges passed settings object with default options.\n *\n * @param  {Object} defaults\n * @param  {Object} settings\n * @return {Object}\n */\nfunction mergeOptions(defaults, settings) {\n  var options = _extends({}, defaults, settings);\n\n  // `Object.assign` do not deeply merge objects, so we\n  // have to do it manually for every nested object\n  // in options. Although it does not look smart,\n  // it's smaller and faster than some fancy\n  // merging deep-merge algorithm script.\n  if (settings.hasOwnProperty('classes')) {\n    options.classes = _extends({}, defaults.classes, settings.classes);\n\n    if (settings.classes.hasOwnProperty('direction')) {\n      options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n    }\n  }\n\n  if (settings.hasOwnProperty('breakpoints')) {\n    options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n  }\n\n  return options;\n}\n\nvar EventsBus = function () {\n  /**\n   * Construct a EventBus instance.\n   *\n   * @param {Object} events\n   */\n  function EventsBus() {\n    var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, EventsBus);\n\n    this.events = events;\n    this.hop = events.hasOwnProperty;\n  }\n\n  /**\n   * Adds listener to the specifed event.\n   *\n   * @param {String|Array} event\n   * @param {Function} handler\n   */\n\n\n  createClass(EventsBus, [{\n    key: 'on',\n    value: function on(event, handler) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.on(event[i], handler);\n        }\n      }\n\n      // Create the event's object if not yet created\n      if (!this.hop.call(this.events, event)) {\n        this.events[event] = [];\n      }\n\n      // Add the handler to queue\n      var index = this.events[event].push(handler) - 1;\n\n      // Provide handle back for removal of event\n      return {\n        remove: function remove() {\n          delete this.events[event][index];\n        }\n      };\n    }\n\n    /**\n     * Runs registered handlers for specified event.\n     *\n     * @param {String|Array} event\n     * @param {Object=} context\n     */\n\n  }, {\n    key: 'emit',\n    value: function emit(event, context) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.emit(event[i], context);\n        }\n      }\n\n      // If the event doesn't exist, or there's no handlers in queue, just leave\n      if (!this.hop.call(this.events, event)) {\n        return;\n      }\n\n      // Cycle through events queue, fire!\n      this.events[event].forEach(function (item) {\n        item(context || {});\n      });\n    }\n  }]);\n  return EventsBus;\n}();\n\nvar Glide = function () {\n  /**\r\n   * Construct glide.\r\n   *\r\n   * @param  {String} selector\r\n   * @param  {Object} options\r\n   */\n  function Glide(selector) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    classCallCheck(this, Glide);\n\n    this._c = {};\n    this._t = [];\n    this._e = new EventsBus();\n\n    this.disabled = false;\n    this.selector = selector;\n    this.settings = mergeOptions(defaults, options);\n    this.index = this.settings.startAt;\n  }\n\n  /**\r\n   * Initializes glide.\r\n   *\r\n   * @param {Object} extensions Collection of extensions to initialize.\r\n   * @return {Glide}\r\n   */\n\n\n  createClass(Glide, [{\n    key: 'mount',\n    value: function mount$$1() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this._e.emit('mount.before');\n\n      if (isObject(extensions)) {\n        this._c = mount(this, extensions, this._e);\n      } else {\n        warn('You need to provide a object on `mount()`');\n      }\n\n      this._e.emit('mount.after');\n\n      return this;\n    }\n\n    /**\r\n     * Collects an instance `translate` transformers.\r\n     *\r\n     * @param  {Array} transformers Collection of transformers.\r\n     * @return {Void}\r\n     */\n\n  }, {\n    key: 'mutate',\n    value: function mutate() {\n      var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (isArray(transformers)) {\n        this._t = transformers;\n      } else {\n        warn('You need to provide a array on `mutate()`');\n      }\n\n      return this;\n    }\n\n    /**\r\n     * Updates glide with specified settings.\r\n     *\r\n     * @param {Object} settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'update',\n    value: function update() {\n      var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this.settings = mergeOptions(this.settings, settings);\n\n      if (settings.hasOwnProperty('startAt')) {\n        this.index = settings.startAt;\n      }\n\n      this._e.emit('update');\n\n      return this;\n    }\n\n    /**\r\n     * Change slide with specified pattern. A pattern must be in the special format:\r\n     * `>` - Move one forward\r\n     * `<` - Move one backward\r\n     * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n     * `>>` - Rewinds to end (last slide)\r\n     * `<<` - Rewinds to start (first slide)\r\n     *\r\n     * @param {String} pattern\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'go',\n    value: function go(pattern) {\n      this._c.Run.make(pattern);\n\n      return this;\n    }\n\n    /**\r\n     * Move track by specified distance.\r\n     *\r\n     * @param {String} distance\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'move',\n    value: function move(distance) {\n      this._c.Transition.disable();\n      this._c.Move.make(distance);\n\n      return this;\n    }\n\n    /**\r\n     * Destroy instance and revert all changes done by this._c.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this._e.emit('destroy');\n\n      return this;\n    }\n\n    /**\r\n     * Start instance autoplaying.\r\n     *\r\n     * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'play',\n    value: function play() {\n      var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (interval) {\n        this.settings.autoplay = interval;\n      }\n\n      this._e.emit('play');\n\n      return this;\n    }\n\n    /**\r\n     * Stop instance autoplaying.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'pause',\n    value: function pause() {\n      this._e.emit('pause');\n\n      return this;\n    }\n\n    /**\r\n     * Sets glide into a idle status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.disabled = true;\n\n      return this;\n    }\n\n    /**\r\n     * Sets glide into a active status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'enable',\n    value: function enable() {\n      this.disabled = false;\n\n      return this;\n    }\n\n    /**\r\n     * Adds cuutom event listener with handler.\r\n     *\r\n     * @param  {String|Array} event\r\n     * @param  {Function} handler\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: 'on',\n    value: function on(event, handler) {\n      this._e.on(event, handler);\n\n      return this;\n    }\n\n    /**\r\n     * Checks if glide is a precised type.\r\n     *\r\n     * @param  {String} name\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: 'isType',\n    value: function isType(name) {\n      return this.settings.type === name;\n    }\n\n    /**\r\n     * Gets value of the core options.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: 'settings',\n    get: function get$$1() {\n      return this._o;\n    }\n\n    /**\r\n     * Sets value of the core options.\r\n     *\r\n     * @param  {Object} o\r\n     * @return {Void}\r\n     */\n    ,\n    set: function set$$1(o) {\n      if (isObject(o)) {\n        this._o = o;\n      } else {\n        warn('Options must be an `object` instance.');\n      }\n    }\n\n    /**\r\n     * Gets current index of the slider.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: 'index',\n    get: function get$$1() {\n      return this._i;\n    }\n\n    /**\r\n     * Sets current index a slider.\r\n     *\r\n     * @return {Object}\r\n     */\n    ,\n    set: function set$$1(i) {\n      this._i = toInt(i);\n    }\n\n    /**\r\n     * Gets type name of the slider.\r\n     *\r\n     * @return {String}\r\n     */\n\n  }, {\n    key: 'type',\n    get: function get$$1() {\n      return this.settings.type;\n    }\n\n    /**\r\n     * Gets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: 'disabled',\n    get: function get$$1() {\n      return this._d;\n    }\n\n    /**\r\n     * Sets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n    ,\n    set: function set$$1(status) {\n      this._d = !!status;\n    }\n  }]);\n  return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n  var Run = {\n    /**\n     * Initializes autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this._o = false;\n    },\n\n\n    /**\n     * Makes glides running based on the passed moving schema.\n     *\n     * @param {String} move\n     */\n    make: function make(move) {\n      var _this = this;\n\n      if (!Glide.disabled) {\n        Glide.disable();\n\n        this.move = move;\n\n        Events.emit('run.before', this.move);\n\n        this.calculate();\n\n        Events.emit('run', this.move);\n\n        Components.Transition.after(function () {\n          if (_this.isStart()) {\n            Events.emit('run.start', _this.move);\n          }\n\n          if (_this.isEnd()) {\n            Events.emit('run.end', _this.move);\n          }\n\n          if (_this.isOffset('<') || _this.isOffset('>')) {\n            _this._o = false;\n\n            Events.emit('run.offset', _this.move);\n          }\n\n          Events.emit('run.after', _this.move);\n\n          Glide.enable();\n        });\n      }\n    },\n\n\n    /**\n     * Calculates current index based on defined move.\n     *\n     * @return {Void}\n     */\n    calculate: function calculate() {\n      var move = this.move,\n          length = this.length;\n      var steps = move.steps,\n          direction = move.direction;\n\n\n      var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n      switch (direction) {\n        case '>':\n          if (steps === '>') {\n            Glide.index = length;\n          } else if (this.isEnd()) {\n            if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n              this._o = true;\n\n              Glide.index = 0;\n            }\n          } else if (countableSteps) {\n            Glide.index += Math.min(length - Glide.index, -toInt(steps));\n          } else {\n            Glide.index++;\n          }\n          break;\n\n        case '<':\n          if (steps === '<') {\n            Glide.index = 0;\n          } else if (this.isStart()) {\n            if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n              this._o = true;\n\n              Glide.index = length;\n            }\n          } else if (countableSteps) {\n            Glide.index -= Math.min(Glide.index, toInt(steps));\n          } else {\n            Glide.index--;\n          }\n          break;\n\n        case '=':\n          Glide.index = steps;\n          break;\n\n        default:\n          warn('Invalid direction pattern [' + direction + steps + '] has been used');\n          break;\n      }\n    },\n\n\n    /**\n     * Checks if we are on the first slide.\n     *\n     * @return {Boolean}\n     */\n    isStart: function isStart() {\n      return Glide.index === 0;\n    },\n\n\n    /**\n     * Checks if we are on the last slide.\n     *\n     * @return {Boolean}\n     */\n    isEnd: function isEnd() {\n      return Glide.index === this.length;\n    },\n\n\n    /**\n     * Checks if we are making a offset run.\n     *\n     * @param {String} direction\n     * @return {Boolean}\n     */\n    isOffset: function isOffset(direction) {\n      return this._o && this.move.direction === direction;\n    }\n  };\n\n  define(Run, 'move', {\n    /**\n     * Gets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    get: function get() {\n      return this._m;\n    },\n\n\n    /**\n     * Sets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    set: function set(value) {\n      var step = value.substr(1);\n\n      this._m = {\n        direction: value.substr(0, 1),\n        steps: step ? toInt(step) ? toInt(step) : step : 0\n      };\n    }\n  });\n\n  define(Run, 'length', {\n    /**\n     * Gets value of the running distance based\n     * on zero-indexing number of slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n      var length = Components.Html.slides.length;\n\n      // If the `bound` option is acitve, a maximum running distance should be\n      // reduced by `perView` and `focusAt` settings. Running distance\n      // should end before creating an empty space after instance.\n\n      if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n        return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n      }\n\n      return length - 1;\n    }\n  });\n\n  define(Run, 'offset', {\n    /**\n     * Gets status of the offsetting flag.\n     *\n     * @return {Boolean}\n     */\n    get: function get() {\n      return this._o;\n    }\n  });\n\n  return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n  return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction throttle(func, wait, options) {\n  var timeout = void 0,\n      context = void 0,\n      args = void 0,\n      result = void 0;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function later() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function throttled() {\n    var at = now();\n    if (!previous && options.leading === false) previous = at;\n    var remaining = wait - (at - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = at;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function () {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n\nvar MARGIN_TYPE = {\n  ltr: ['marginLeft', 'marginRight'],\n  rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps (Glide, Components, Events) {\n  var Gaps = {\n    /**\n     * Applies gaps between slides. First and last\n     * slides do not receive it's edge margins.\n     *\n     * @param {HTMLCollection} slides\n     * @return {Void}\n     */\n    apply: function apply(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n        var direction = Components.Direction.value;\n\n        if (i !== 0) {\n          style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n        } else {\n          style[MARGIN_TYPE[direction][0]] = '';\n        }\n\n        if (i !== slides.length - 1) {\n          style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n        } else {\n          style[MARGIN_TYPE[direction][1]] = '';\n        }\n      }\n    },\n\n\n    /**\n     * Removes gaps from the slides.\n     *\n     * @param {HTMLCollection} slides\n     * @returns {Void}\n    */\n    remove: function remove(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n\n        style.marginLeft = '';\n        style.marginRight = '';\n      }\n    }\n  };\n\n  define(Gaps, 'value', {\n    /**\n     * Gets value of the gap.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return toInt(Glide.settings.gap);\n    }\n  });\n\n  define(Gaps, 'grow', {\n    /**\n     * Gets additional dimentions value caused by gaps.\n     * Used to increase width of the slides wrapper.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Gaps.value * (Components.Sizes.length - 1);\n    }\n  });\n\n  define(Gaps, 'reductor', {\n    /**\n     * Gets reduction value caused by gaps.\n     * Used to subtract width of the slides.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var perView = Glide.settings.perView;\n\n      return Gaps.value * (perView - 1) / perView;\n    }\n  });\n\n  /**\n   * Apply calculated gaps:\n   * - after building, so slides (including clones) will receive proper margins\n   * - on updating via API, to recalculate gaps with new options\n   */\n  Events.on(['build.after', 'update'], throttle(function () {\n    Gaps.apply(Components.Html.wrapper.children);\n  }, 30));\n\n  /**\n   * Remove gaps:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Gaps.remove(Components.Html.wrapper.children);\n  });\n\n  return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param  {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n  if (node && node.parentNode) {\n    var n = node.parentNode.firstChild;\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== node) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  }\n\n  return [];\n}\n\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param  {Element} node\n * @return {Boolean}\n */\nfunction exist(node) {\n  if (node && node instanceof window.HTMLElement) {\n    return true;\n  }\n\n  return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html (Glide, Components) {\n  var Html = {\n    /**\n     * Setup slider HTML nodes.\n     *\n     * @param {Glide} glide\n     */\n    mount: function mount() {\n      this.root = Glide.selector;\n      this.track = this.root.querySelector(TRACK_SELECTOR);\n      this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n        return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n      });\n    }\n  };\n\n  define(Html, 'root', {\n    /**\n     * Gets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._r;\n    },\n\n\n    /**\n     * Sets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    set: function set(r) {\n      if (isString(r)) {\n        r = document.querySelector(r);\n      }\n\n      if (exist(r)) {\n        Html._r = r;\n      } else {\n        warn('Root element must be a existing Html node');\n      }\n    }\n  });\n\n  define(Html, 'track', {\n    /**\n     * Gets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._t;\n    },\n\n\n    /**\n     * Sets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    set: function set(t) {\n      if (exist(t)) {\n        Html._t = t;\n      } else {\n        warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n      }\n    }\n  });\n\n  define(Html, 'wrapper', {\n    /**\n     * Gets node of the slides wrapper.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html.track.children[0];\n    }\n  });\n\n  return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n  var Peek = {\n    /**\n     * Setups how much to peek based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.peek;\n    }\n  };\n\n  define(Peek, 'value', {\n    /**\n     * Gets value of the peek.\n     *\n     * @returns {Number|Object}\n     */\n    get: function get() {\n      return Peek._v;\n    },\n\n\n    /**\n     * Sets value of the peek.\n     *\n     * @param {Number|Object} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (isObject(value)) {\n        value.before = toInt(value.before);\n        value.after = toInt(value.after);\n      } else {\n        value = toInt(value);\n      }\n\n      Peek._v = value;\n    }\n  });\n\n  define(Peek, 'reductor', {\n    /**\n     * Gets reduction value caused by peek.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var value = Peek.value;\n      var perView = Glide.settings.perView;\n\n      if (isObject(value)) {\n        return value.before / perView + value.after / perView;\n      }\n\n      return value * 2 / perView;\n    }\n  });\n\n  /**\n   * Recalculate peeking sizes on:\n   * - when resizing window to update to proper percents\n   */\n  Events.on(['resize', 'update'], function () {\n    Peek.mount();\n  });\n\n  return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n  var Move = {\n    /**\n     * Constructs move component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      this._o = 0;\n    },\n\n\n    /**\n     * Calculates a movement value based on passed offset and currently active index.\n     *\n     * @param  {Number} offset\n     * @return {Void}\n     */\n    make: function make() {\n      var _this = this;\n\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      this.offset = offset;\n\n      Events.emit('move', {\n        movement: this.value\n      });\n\n      Components.Transition.after(function () {\n        Events.emit('move.after', {\n          movement: _this.value\n        });\n      });\n    }\n  };\n\n  define(Move, 'offset', {\n    /**\n     * Gets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Move._o;\n    },\n\n\n    /**\n     * Sets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    set: function set(value) {\n      Move._o = !isUndefined(value) ? toInt(value) : 0;\n    }\n  });\n\n  define(Move, 'translate', {\n    /**\n     * Gets a raw movement value.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Sizes.slideWidth * Glide.index;\n    }\n  });\n\n  define(Move, 'value', {\n    /**\n     * Gets an actual movement value corrected by offset.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var offset = this.offset;\n      var translate = this.translate;\n\n      if (Components.Direction.is('rtl')) {\n        return translate + offset;\n      }\n\n      return translate - offset;\n    }\n  });\n\n  /**\n   * Make movement to proper slide on:\n   * - before build, so glide will start at `startAt` index\n   * - on each standard run to move to newly calculated index\n   */\n  Events.on(['build.before', 'run'], function () {\n    Move.make();\n  });\n\n  return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n  var Sizes = {\n    /**\n     * Setups dimentions of slides.\n     *\n     * @return {Void}\n     */\n    setupSlides: function setupSlides() {\n      var width = this.slideWidth + 'px';\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = width;\n      }\n    },\n\n\n    /**\n     * Setups dimentions of slides wrapper.\n     *\n     * @return {Void}\n     */\n    setupWrapper: function setupWrapper(dimention) {\n      Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n    },\n\n\n    /**\n     * Removes applied styles from HTML elements.\n     *\n     * @returns {Void}\n     */\n    remove: function remove() {\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = '';\n      }\n\n      Components.Html.wrapper.style.width = '';\n    }\n  };\n\n  define(Sizes, 'length', {\n    /**\n     * Gets count number of the slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.slides.length;\n    }\n  });\n\n  define(Sizes, 'width', {\n    /**\n     * Gets width value of the glide.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.root.offsetWidth;\n    }\n  });\n\n  define(Sizes, 'wrapperSize', {\n    /**\n     * Gets size of the slides wrapper.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n    }\n  });\n\n  define(Sizes, 'slideWidth', {\n    /**\n     * Gets width value of the single slide.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n    }\n  });\n\n  /**\n   * Apply calculated glide's dimensions:\n   * - before building, so other dimentions (e.g. translate) will be calculated propertly\n   * - when resizing window to recalculate sildes dimensions\n   * - on updating via API, to calculate dimensions based on new options\n   */\n  Events.on(['build.before', 'resize', 'update'], function () {\n    Sizes.setupSlides();\n    Sizes.setupWrapper();\n  });\n\n  /**\n   * Remove calculated glide's dimensions:\n   * - on destoting to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Sizes.remove();\n  });\n\n  return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n  var Build = {\n    /**\n     * Init glide building. Adds classes, sets\n     * dimensions and setups initial state.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      Events.emit('build.before');\n\n      this.typeClass();\n      this.activeClass();\n\n      Events.emit('build.after');\n    },\n\n\n    /**\n     * Adds `type` class to the glide element.\n     *\n     * @return {Void}\n     */\n    typeClass: function typeClass() {\n      Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n    },\n\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    activeClass: function activeClass() {\n      var classes = Glide.settings.classes;\n      var slide = Components.Html.slides[Glide.index];\n\n      if (slide) {\n        slide.classList.add(classes.activeSlide);\n\n        siblings(slide).forEach(function (sibling) {\n          sibling.classList.remove(classes.activeSlide);\n        });\n      }\n    },\n\n\n    /**\n     * Removes HTML classes applied at building.\n     *\n     * @return {Void}\n     */\n    removeClasses: function removeClasses() {\n      var classes = Glide.settings.classes;\n\n      Components.Html.root.classList.remove(classes[Glide.settings.type]);\n\n      Components.Html.slides.forEach(function (sibling) {\n        sibling.classList.remove(classes.activeSlide);\n      });\n    }\n  };\n\n  /**\n   * Clear building classes:\n   * - on destroying to bring HTML to its initial state\n   * - on updating to remove classes before remounting component\n   */\n  Events.on(['destroy', 'update'], function () {\n    Build.removeClasses();\n  });\n\n  /**\n   * Remount component:\n   * - on resizing of the window to calculate new dimentions\n   * - on updating settings via API\n   */\n  Events.on(['resize', 'update'], function () {\n    Build.mount();\n  });\n\n  /**\n   * Swap active class of current slide:\n   * - after each move to the new index\n   */\n  Events.on('move.after', function () {\n    Build.activeClass();\n  });\n\n  return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n  var Clones = {\n    /**\n     * Create pattern map and collect slides to be cloned.\n     */\n    mount: function mount() {\n      this.items = [];\n\n      if (Glide.isType('carousel')) {\n        this.items = this.collect();\n      }\n    },\n\n\n    /**\n     * Collect clones with pattern.\n     *\n     * @return {Void}\n     */\n    collect: function collect() {\n      var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var slides = Components.Html.slides;\n      var _Glide$settings = Glide.settings,\n          perView = _Glide$settings.perView,\n          classes = _Glide$settings.classes;\n\n\n      var peekIncrementer = +!!Glide.settings.peek;\n      var part = perView + peekIncrementer;\n      var start = slides.slice(0, part);\n      var end = slides.slice(-part);\n\n      for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n        for (var i = 0; i < start.length; i++) {\n          var clone = start[i].cloneNode(true);\n\n          clone.classList.add(classes.cloneSlide);\n\n          items.push(clone);\n        }\n\n        for (var _i = 0; _i < end.length; _i++) {\n          var _clone = end[_i].cloneNode(true);\n\n          _clone.classList.add(classes.cloneSlide);\n\n          items.unshift(_clone);\n        }\n      }\n\n      return items;\n    },\n\n\n    /**\n     * Append cloned slides with generated pattern.\n     *\n     * @return {Void}\n     */\n    append: function append() {\n      var items = this.items;\n      var _Components$Html = Components.Html,\n          wrapper = _Components$Html.wrapper,\n          slides = _Components$Html.slides;\n\n\n      var half = Math.floor(items.length / 2);\n      var prepend = items.slice(0, half).reverse();\n      var append = items.slice(half, items.length);\n      var width = Components.Sizes.slideWidth + 'px';\n\n      for (var i = 0; i < append.length; i++) {\n        wrapper.appendChild(append[i]);\n      }\n\n      for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n        wrapper.insertBefore(prepend[_i2], slides[0]);\n      }\n\n      for (var _i3 = 0; _i3 < items.length; _i3++) {\n        items[_i3].style.width = width;\n      }\n    },\n\n\n    /**\n     * Remove all cloned slides.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      var items = this.items;\n\n\n      for (var i = 0; i < items.length; i++) {\n        Components.Html.wrapper.removeChild(items[i]);\n      }\n    }\n  };\n\n  define(Clones, 'grow', {\n    /**\n     * Gets additional dimentions value caused by clones.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n    }\n  });\n\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n  Events.on('update', function () {\n    Clones.remove();\n    Clones.mount();\n    Clones.append();\n  });\n\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n  Events.on('build.before', function () {\n    if (Glide.isType('carousel')) {\n      Clones.append();\n    }\n  });\n\n  /**\n   * Remove clones HTMLElements:\n   * - on destroying, to bring HTML to its initial state\n   */\n  Events.on('destroy', function () {\n    Clones.remove();\n  });\n\n  return Clones;\n}\n\nvar EventsBinder = function () {\n  /**\n   * Construct a EventsBinder instance.\n   */\n  function EventsBinder() {\n    var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    classCallCheck(this, EventsBinder);\n\n    this.listeners = listeners;\n  }\n\n  /**\n   * Adds events listeners to arrows HTML elements.\n   *\n   * @param  {String|Array} events\n   * @param  {Element|Window|Document} el\n   * @param  {Function} closure\n   * @param  {Boolean|Object} capture\n   * @return {Void}\n   */\n\n\n  createClass(EventsBinder, [{\n    key: 'on',\n    value: function on(events, el, closure) {\n      var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        this.listeners[events[i]] = closure;\n\n        el.addEventListener(events[i], this.listeners[events[i]], capture);\n      }\n    }\n\n    /**\n     * Removes event listeners from arrows HTML elements.\n     *\n     * @param  {String|Array} events\n     * @param  {Element|Window|Document} el\n     * @param  {Boolean|Object} capture\n     * @return {Void}\n     */\n\n  }, {\n    key: 'off',\n    value: function off(events, el) {\n      var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        el.removeEventListener(events[i], this.listeners[events[i]], capture);\n      }\n    }\n\n    /**\n     * Destroy collected listeners.\n     *\n     * @returns {Void}\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      delete this.listeners;\n    }\n  }]);\n  return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Resize = {\n    /**\n     * Initializes window bindings.\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n\n    /**\n     * Binds `rezsize` listener to the window.\n     * It's a costly event, so we are debouncing it.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('resize', window, throttle(function () {\n        Events.emit('resize');\n      }, Glide.settings.throttle));\n    },\n\n\n    /**\n     * Unbinds listeners from the window.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('resize', window);\n    }\n  };\n\n  /**\n   * Remove bindings from window:\n   * - on destroying, to remove added EventListener\n   */\n  Events.on('destroy', function () {\n    Resize.unbind();\n    Binder.destroy();\n  });\n\n  return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n  '>': '<',\n  '<': '>',\n  '=': '='\n};\n\nfunction Direction (Glide, Components, Events) {\n  var Direction = {\n    /**\n     * Setups gap value based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.direction;\n    },\n\n\n    /**\n     * Resolves pattern based on direction value\n     *\n     * @param {String} pattern\n     * @returns {String}\n     */\n    resolve: function resolve(pattern) {\n      var token = pattern.slice(0, 1);\n\n      if (this.is('rtl')) {\n        return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n      }\n\n      return pattern;\n    },\n\n\n    /**\n     * Checks value of direction mode.\n     *\n     * @param {String} direction\n     * @returns {Boolean}\n     */\n    is: function is(direction) {\n      return this.value === direction;\n    },\n\n\n    /**\n     * Applies direction class to the root HTML element.\n     *\n     * @return {Void}\n     */\n    addClass: function addClass() {\n      Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n    },\n\n\n    /**\n     * Removes direction class from the root HTML element.\n     *\n     * @return {Void}\n     */\n    removeClass: function removeClass() {\n      Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n    }\n  };\n\n  define(Direction, 'value', {\n    /**\n     * Gets value of the direction.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Direction._v;\n    },\n\n\n    /**\n     * Sets value of the direction.\n     *\n     * @param {String} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (VALID_DIRECTIONS.indexOf(value) > -1) {\n        Direction._v = value;\n      } else {\n        warn('Direction value must be `ltr` or `rtl`');\n      }\n    }\n  });\n\n  /**\n   * Clear direction class:\n   * - on destroy to bring HTML to its initial state\n   * - on update to remove class before reappling bellow\n   */\n  Events.on(['destroy', 'update'], function () {\n    Direction.removeClass();\n  });\n\n  /**\n   * Remount component:\n   * - on update to reflect changes in direction value\n   */\n  Events.on('update', function () {\n    Direction.mount();\n  });\n\n  /**\n   * Apply direction class:\n   * - before building to apply class for the first time\n   * - on updating to reapply direction class that may changed\n   */\n  Events.on(['build.before', 'update'], function () {\n    Direction.addClass();\n  });\n\n  return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n  return {\n    /**\n     * Negates the passed translate if glide is in RTL option.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Components.Direction.is('rtl')) {\n        return -translate;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with number in the `gap` settings.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      return translate + Components.Gaps.value * Glide.index;\n    }\n  };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n  return {\n    /**\n     * Adds to the passed translate width of the half of clones.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      return translate + Components.Clones.grow / 2;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Peeking (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with a `peek` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Glide.settings.focusAt >= 0) {\n        var peek = Components.Peek.value;\n\n        if (isObject(peek)) {\n          return translate - peek.before;\n        }\n\n        return translate - peek;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with index in the `focusAt` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      var gap = Components.Gaps.value;\n      var width = Components.Sizes.width;\n      var focusAt = Glide.settings.focusAt;\n      var slideWidth = Components.Sizes.slideWidth;\n\n      if (focusAt === 'center') {\n        return translate - (width / 2 - slideWidth / 2);\n      }\n\n      return translate - slideWidth * focusAt - gap * focusAt;\n    }\n  };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction mutator (Glide, Components, Events) {\n  /**\n   * Merge instance transformers with collection of default transformers.\n   * It's important that the Rtl component be last on the list,\n   * so it reflects all previous transformations.\n   *\n   * @type {Array}\n   */\n  var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n\n  return {\n    /**\n     * Piplines translate value with registered transformers.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    mutate: function mutate(translate) {\n      for (var i = 0; i < TRANSFORMERS.length; i++) {\n        var transformer = TRANSFORMERS[i];\n\n        if (isFunction(transformer) && isFunction(transformer().modify)) {\n          translate = transformer(Glide, Components, Events).modify(translate);\n        } else {\n          warn('Transformer should be a function that returns an object with `modify()` method');\n        }\n      }\n\n      return translate;\n    }\n  };\n}\n\nfunction Translate (Glide, Components, Events) {\n  var Translate = {\n    /**\n     * Sets value of translate on HTML element.\n     *\n     * @param {Number} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      var transform = mutator(Glide, Components).mutate(value);\n\n      Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n    },\n\n\n    /**\n     * Removes value of translate from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transform = '';\n    }\n  };\n\n  /**\n   * Set new translate value:\n   * - on move to reflect index change\n   * - on updating via API to reflect possible changes in options\n   */\n  Events.on('move', function (context) {\n    var gap = Components.Gaps.value;\n    var length = Components.Sizes.length;\n    var width = Components.Sizes.slideWidth;\n\n    if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n      Components.Transition.after(function () {\n        Events.emit('translate.jump');\n\n        Translate.set(width * (length - 1));\n      });\n\n      return Translate.set(-width - gap * length);\n    }\n\n    if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n      Components.Transition.after(function () {\n        Events.emit('translate.jump');\n\n        Translate.set(0);\n      });\n\n      return Translate.set(width * length + gap * length);\n    }\n\n    return Translate.set(context.movement);\n  });\n\n  /**\n   * Remove translate:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Translate.remove();\n  });\n\n  return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n  /**\n   * Holds inactivity status of transition.\n   * When true transition is not applied.\n   *\n   * @type {Boolean}\n   */\n  var disabled = false;\n\n  var Transition = {\n    /**\n     * Composes string of the CSS transition.\n     *\n     * @param {String} property\n     * @return {String}\n     */\n    compose: function compose(property) {\n      var settings = Glide.settings;\n\n      if (!disabled) {\n        return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n      }\n\n      return property + ' 0ms ' + settings.animationTimingFunc;\n    },\n\n\n    /**\n     * Sets value of transition on HTML element.\n     *\n     * @param {String=} property\n     * @return {Void}\n     */\n    set: function set() {\n      var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n      Components.Html.wrapper.style.transition = this.compose(property);\n    },\n\n\n    /**\n     * Removes value of transition from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transition = '';\n    },\n\n\n    /**\n     * Runs callback after animation.\n     *\n     * @param  {Function} callback\n     * @return {Void}\n     */\n    after: function after(callback) {\n      setTimeout(function () {\n        callback();\n      }, this.duration);\n    },\n\n\n    /**\n     * Enable transition.\n     *\n     * @return {Void}\n     */\n    enable: function enable() {\n      disabled = false;\n\n      this.set();\n    },\n\n\n    /**\n     * Disable transition.\n     *\n     * @return {Void}\n     */\n    disable: function disable() {\n      disabled = true;\n\n      this.set();\n    }\n  };\n\n  define(Transition, 'duration', {\n    /**\n     * Gets duration of the transition based\n     * on currently running animation type.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n\n      if (Glide.isType('slider') && Components.Run.offset) {\n        return settings.rewindDuration;\n      }\n\n      return settings.animationDuration;\n    }\n  });\n\n  /**\n   * Set transition `style` value:\n   * - on each moving, because it may be cleared by offset move\n   */\n  Events.on('move', function () {\n    Transition.set();\n  });\n\n  /**\n   * Disable transition:\n   * - before initial build to avoid transitioning from `0` to `startAt` index\n   * - while resizing window and recalculating dimentions\n   * - on jumping from offset transition at start and end edges in `carousel` type\n   */\n  Events.on(['build.before', 'resize', 'translate.jump'], function () {\n    Transition.disable();\n  });\n\n  /**\n   * Enable transition:\n   * - on each running, because it may be disabled by offset move\n   */\n  Events.on('run', function () {\n    Transition.enable();\n  });\n\n  /**\n   * Remove transition:\n   * - on destroying to bring markup to its inital state\n   */\n  Events.on('destroy', function () {\n    Transition.remove();\n  });\n\n  return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\nvar supportsPassive = false;\n\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function get() {\n      supportsPassive = true;\n    }\n  });\n\n  window.addEventListener('testPassive', null, opts);\n  window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction swipe (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var swipeSin = 0;\n  var swipeStartX = 0;\n  var swipeStartY = 0;\n  var disabled = false;\n  var capture = supportsPassive$1 ? { passive: true } : false;\n\n  var Swipe = {\n    /**\n     * Initializes swipe bindings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bindSwipeStart();\n    },\n\n\n    /**\n     * Handler for `swipestart` event. Calculates entry points of the user's tap.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    start: function start(event) {\n      if (!disabled && !Glide.disabled) {\n        this.disable();\n\n        var swipe = this.touches(event);\n\n        swipeSin = null;\n        swipeStartX = toInt(swipe.pageX);\n        swipeStartY = toInt(swipe.pageY);\n\n        this.bindSwipeMove();\n        this.bindSwipeEnd();\n\n        Events.emit('swipe.start');\n      }\n    },\n\n\n    /**\n     * Handler for `swipemove` event. Calculates user's tap angle and distance.\n     *\n     * @param {Object} event\n     */\n    move: function move(event) {\n      if (!Glide.disabled) {\n        var _Glide$settings = Glide.settings,\n            touchAngle = _Glide$settings.touchAngle,\n            touchRatio = _Glide$settings.touchRatio,\n            classes = _Glide$settings.classes;\n\n\n        var swipe = this.touches(event);\n\n        var subExSx = toInt(swipe.pageX) - swipeStartX;\n        var subEySy = toInt(swipe.pageY) - swipeStartY;\n        var powEX = Math.abs(subExSx << 2);\n        var powEY = Math.abs(subEySy << 2);\n        var swipeHypotenuse = Math.sqrt(powEX + powEY);\n        var swipeCathetus = Math.sqrt(powEY);\n\n        swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n        if (swipeSin * 180 / Math.PI < touchAngle) {\n          event.stopPropagation();\n\n          Components.Move.make(subExSx * toFloat(touchRatio));\n\n          Components.Html.root.classList.add(classes.dragging);\n\n          Events.emit('swipe.move');\n        } else {\n          return false;\n        }\n      }\n    },\n\n\n    /**\n     * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    end: function end(event) {\n      if (!Glide.disabled) {\n        var settings = Glide.settings;\n\n        var swipe = this.touches(event);\n        var threshold = this.threshold(event);\n\n        var swipeDistance = swipe.pageX - swipeStartX;\n        var swipeDeg = swipeSin * 180 / Math.PI;\n        var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n\n        this.enable();\n\n        if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n          // While swipe is positive and greater than threshold move backward.\n          if (settings.perTouch) {\n            steps = Math.min(steps, toInt(settings.perTouch));\n          }\n\n          if (Components.Direction.is('rtl')) {\n            steps = -steps;\n          }\n\n          Components.Run.make(Components.Direction.resolve('<' + steps));\n        } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n          // While swipe is negative and lower than negative threshold move forward.\n          if (settings.perTouch) {\n            steps = Math.max(steps, -toInt(settings.perTouch));\n          }\n\n          if (Components.Direction.is('rtl')) {\n            steps = -steps;\n          }\n\n          Components.Run.make(Components.Direction.resolve('>' + steps));\n        } else {\n          // While swipe don't reach distance apply previous transform.\n          Components.Move.make();\n        }\n\n        Components.Html.root.classList.remove(settings.classes.dragging);\n\n        this.unbindSwipeMove();\n        this.unbindSwipeEnd();\n\n        Events.emit('swipe.end');\n      }\n    },\n\n\n    /**\n     * Binds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    bindSwipeStart: function bindSwipeStart() {\n      var _this = this;\n\n      var settings = Glide.settings;\n\n      if (settings.swipeThreshold) {\n        Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n\n      if (settings.dragThreshold) {\n        Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n    },\n\n\n    /**\n     * Unbinds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeStart: function unbindSwipeStart() {\n      Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n      Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n    },\n\n\n    /**\n     * Binds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    bindSwipeMove: function bindSwipeMove() {\n      var _this2 = this;\n\n      Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n        _this2.move(event);\n      }, Glide.settings.throttle), capture);\n    },\n\n\n    /**\n     * Unbinds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeMove: function unbindSwipeMove() {\n      Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n    },\n\n\n    /**\n     * Binds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    bindSwipeEnd: function bindSwipeEnd() {\n      var _this3 = this;\n\n      Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n        _this3.end(event);\n      });\n    },\n\n\n    /**\n     * Unbinds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeEnd: function unbindSwipeEnd() {\n      Binder.off(END_EVENTS, Components.Html.wrapper);\n    },\n\n\n    /**\n     * Normalizes event touches points accorting to different types.\n     *\n     * @param {Object} event\n     */\n    touches: function touches(event) {\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return event;\n      }\n\n      return event.touches[0] || event.changedTouches[0];\n    },\n\n\n    /**\n     * Gets value of minimum swipe distance settings based on event type.\n     *\n     * @return {Number}\n     */\n    threshold: function threshold(event) {\n      var settings = Glide.settings;\n\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return settings.dragThreshold;\n      }\n\n      return settings.swipeThreshold;\n    },\n\n\n    /**\n     * Enables swipe event.\n     *\n     * @return {self}\n     */\n    enable: function enable() {\n      disabled = false;\n\n      Components.Transition.enable();\n\n      return this;\n    },\n\n\n    /**\n     * Disables swipe event.\n     *\n     * @return {self}\n     */\n    disable: function disable() {\n      disabled = true;\n\n      Components.Transition.disable();\n\n      return this;\n    }\n  };\n\n  /**\n   * Add component class:\n   * - after initial building\n   */\n  Events.on('build.after', function () {\n    Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n  });\n\n  /**\n   * Remove swiping bindings:\n   * - on destroying, to remove added EventListeners\n   */\n  Events.on('destroy', function () {\n    Swipe.unbindSwipeStart();\n    Swipe.unbindSwipeMove();\n    Swipe.unbindSwipeEnd();\n    Binder.destroy();\n  });\n\n  return Swipe;\n}\n\nfunction images (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Images = {\n    /**\n     * Binds listener to glide wrapper.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n\n    /**\n     * Binds `dragstart` event on wrapper to prevent dragging images.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n    },\n\n\n    /**\n     * Unbinds `dragstart` event on wrapper.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('dragstart', Components.Html.wrapper);\n    },\n\n\n    /**\n     * Event handler. Prevents dragging.\n     *\n     * @return {Void}\n     */\n    dragstart: function dragstart(event) {\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * Remove bindings from images:\n   * - on destroying, to remove added EventListeners\n   */\n  Events.on('destroy', function () {\n    Images.unbind();\n    Binder.destroy();\n  });\n\n  return Images;\n}\n\nfunction anchors (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  /**\n   * Holds detaching status of anchors.\n   * Prevents detaching of already detached anchors.\n   *\n   * @private\n   * @type {Boolean}\n   */\n  var detached = false;\n\n  /**\n   * Holds preventing status of anchors.\n   * If `true` redirection after click will be disabled.\n   *\n   * @private\n   * @type {Boolean}\n   */\n  var prevented = false;\n\n  var Anchors = {\n    /**\n     * Setups a initial state of anchors component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      /**\n       * Holds collection of anchors elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._a = Components.Html.wrapper.querySelectorAll('a');\n\n      this.bind();\n    },\n\n\n    /**\n     * Binds events to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('click', Components.Html.wrapper, this.click);\n    },\n\n\n    /**\n     * Unbinds events attached to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('click', Components.Html.wrapper);\n    },\n\n\n    /**\n     * Handler for click event. Prevents clicks when glide is in `prevent` status.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    click: function click(event) {\n      if (prevented) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    },\n\n\n    /**\n     * Detaches anchors click event inside glide.\n     *\n     * @return {self}\n     */\n    detach: function detach() {\n      prevented = true;\n\n      if (!detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = false;\n\n          this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n\n          this.items[i].removeAttribute('href');\n        }\n\n        detached = true;\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Attaches anchors click events inside glide.\n     *\n     * @return {self}\n     */\n    attach: function attach() {\n      prevented = false;\n\n      if (detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = true;\n\n          this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n        }\n\n        detached = false;\n      }\n\n      return this;\n    }\n  };\n\n  define(Anchors, 'items', {\n    /**\n     * Gets collection of the arrows HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Anchors._a;\n    }\n  });\n\n  /**\n   * Detach anchors inside slides:\n   * - on swiping, so they won't redirect to its `href` attributes\n   */\n  Events.on('swipe.move', function () {\n    Anchors.detach();\n  });\n\n  /**\n   * Attach anchors inside slides:\n   * - after swiping and transitions ends, so they can redirect after click again\n   */\n  Events.on('swipe.end', function () {\n    Components.Transition.after(function () {\n      Anchors.attach();\n    });\n  });\n\n  /**\n   * Unbind anchors inside slides:\n   * - on destroying, to bring anchors to its initial state\n   */\n  Events.on('destroy', function () {\n    Anchors.attach();\n    Anchors.unbind();\n    Binder.destroy();\n  });\n\n  return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction controls (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var capture = supportsPassive$1 ? { passive: true } : false;\n\n  var Controls = {\n    /**\n     * Inits arrows. Binds events listeners\n     * to the arrows HTML elements.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      /**\n       * Collection of navigation HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n\n      /**\n       * Collection of controls HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n\n      this.addBindings();\n    },\n\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    setActive: function setActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.addClass(this._n[i].children);\n      }\n    },\n\n\n    /**\n     * Removes active class to current slide.\n     *\n     * @return {Void}\n     */\n    removeActive: function removeActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.removeClass(this._n[i].children);\n      }\n    },\n\n\n    /**\n     * Toggles active class on items inside navigation.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    addClass: function addClass(controls) {\n      var settings = Glide.settings;\n      var item = controls[Glide.index];\n\n      if (item) {\n        item.classList.add(settings.classes.activeNav);\n\n        siblings(item).forEach(function (sibling) {\n          sibling.classList.remove(settings.classes.activeNav);\n        });\n      }\n    },\n\n\n    /**\n     * Removes active class from active control.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    removeClass: function removeClass(controls) {\n      var item = controls[Glide.index];\n\n      if (item) {\n        item.classList.remove(Glide.settings.classes.activeNav);\n      }\n    },\n\n\n    /**\n     * Adds handles to the each group of controls.\n     *\n     * @return {Void}\n     */\n    addBindings: function addBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.bind(this._c[i].children);\n      }\n    },\n\n\n    /**\n     * Removes handles from the each group of controls.\n     *\n     * @return {Void}\n     */\n    removeBindings: function removeBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.unbind(this._c[i].children);\n      }\n    },\n\n\n    /**\n     * Binds events to arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    bind: function bind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.on('click', elements[i], this.click);\n        Binder.on('touchstart', elements[i], this.click, capture);\n      }\n    },\n\n\n    /**\n     * Unbinds events binded to the arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    unbind: function unbind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.off(['click', 'touchstart'], elements[i]);\n      }\n    },\n\n\n    /**\n     * Handles `click` event on the arrows HTML elements.\n     * Moves slider in driection precised in\n     * `data-glide-dir` attribute.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    click: function click(event) {\n      event.preventDefault();\n\n      Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n    }\n  };\n\n  define(Controls, 'items', {\n    /**\n     * Gets collection of the controls HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Controls._c;\n    }\n  });\n\n  /**\n   * Swap active class of current navigation item:\n   * - after mounting to set it to initial index\n   * - after each move to the new index\n   */\n  Events.on(['mount.after', 'move.after'], function () {\n    Controls.setActive();\n  });\n\n  /**\n   * Remove bindings and HTML Classes:\n   * - on destroying, to bring markup to its initial state\n   */\n  Events.on('destroy', function () {\n    Controls.removeBindings();\n    Controls.removeActive();\n    Binder.destroy();\n  });\n\n  return Controls;\n}\n\nfunction keyboard (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Keyboard = {\n    /**\n     * Binds keyboard events on component mount.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      if (Glide.settings.keyboard) {\n        this.bind();\n      }\n    },\n\n\n    /**\n     * Adds keyboard press events.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('keyup', document, this.press);\n    },\n\n\n    /**\n     * Removes keyboard press events.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('keyup', document);\n    },\n\n\n    /**\n     * Handles keyboard's arrows press and moving glide foward and backward.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    press: function press(event) {\n      if (event.keyCode === 39) {\n        Components.Run.make(Components.Direction.resolve('>'));\n      }\n\n      if (event.keyCode === 37) {\n        Components.Run.make(Components.Direction.resolve('<'));\n      }\n    }\n  };\n\n  /**\n   * Remove bindings from keyboard:\n   * - on destroying to remove added events\n   * - on updating to remove events before remounting\n   */\n  Events.on(['destroy', 'update'], function () {\n    Keyboard.unbind();\n  });\n\n  /**\n   * Remount component\n   * - on updating to reflect potential changes in settings\n   */\n  Events.on('update', function () {\n    Keyboard.mount();\n  });\n\n  /**\n   * Destroy binder:\n   * - on destroying to remove listeners\n   */\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n\n  return Keyboard;\n}\n\nfunction autoplay (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  var Autoplay = {\n    /**\n     * Initializes autoplaying and events.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.start();\n\n      if (Glide.settings.hoverpause) {\n        this.bind();\n      }\n    },\n\n\n    /**\n     * Starts autoplaying in configured interval.\n     *\n     * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n     * @return {Void}\n     */\n    start: function start() {\n      var _this = this;\n\n      if (Glide.settings.autoplay) {\n        if (isUndefined(this._i)) {\n          this._i = setInterval(function () {\n            _this.stop();\n\n            Components.Run.make('>');\n\n            _this.start();\n          }, this.time);\n        }\n      }\n    },\n\n\n    /**\n     * Stops autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    stop: function stop() {\n      this._i = clearInterval(this._i);\n    },\n\n\n    /**\n     * Stops autoplaying while mouse is over glide's area.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      var _this2 = this;\n\n      Binder.on('mouseover', Components.Html.root, function () {\n        _this2.stop();\n      });\n\n      Binder.on('mouseout', Components.Html.root, function () {\n        _this2.start();\n      });\n    },\n\n\n    /**\n     * Unbind mouseover events.\n     *\n     * @returns {Void}\n     */\n    unbind: function unbind() {\n      Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n    }\n  };\n\n  define(Autoplay, 'time', {\n    /**\n     * Gets time period value for the autoplay interval. Prioritizes\n     * times in `data-glide-autoplay` attrubutes over options.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n      if (autoplay) {\n        return toInt(autoplay);\n      }\n\n      return toInt(Glide.settings.autoplay);\n    }\n  });\n\n  /**\n   * Stop autoplaying and unbind events:\n   * - on destroying, to clear defined interval\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on(['destroy', 'update'], function () {\n    Autoplay.unbind();\n  });\n\n  /**\n   * Stop autoplaying:\n   * - before each run, to restart autoplaying\n   * - on pausing via API\n   * - on destroying, to clear defined interval\n   * - while starting a swipe\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n    Autoplay.stop();\n  });\n\n  /**\n   * Start autoplaying:\n   * - after each run, to restart autoplaying\n   * - on playing via API\n   * - while ending a swipe\n   */\n  Events.on(['run.after', 'play', 'swipe.end'], function () {\n    Autoplay.start();\n  });\n\n  /**\n   * Remount autoplaying:\n   * - on updating via API to reset interval that may changed\n   */\n  Events.on('update', function () {\n    Autoplay.mount();\n  });\n\n  /**\n   * Destroy a binder:\n   * - on destroying glide instance to clearup listeners\n   */\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n\n  return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\nfunction sortBreakpoints(points) {\n  if (isObject(points)) {\n    return sortKeys(points);\n  } else {\n    warn('Breakpoints option must be an object');\n  }\n\n  return {};\n}\n\nfunction breakpoints (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n\n  /**\n   * Holds reference to settings.\n   *\n   * @type {Object}\n   */\n  var settings = Glide.settings;\n\n  /**\n   * Holds reference to breakpoints object in settings. Sorts breakpoints\n   * from smaller to larger. It is required in order to proper\n   * matching currently active breakpoint settings.\n   *\n   * @type {Object}\n   */\n  var points = sortBreakpoints(settings.breakpoints);\n\n  /**\n   * Cache initial settings before overwritting.\n   *\n   * @type {Object}\n   */\n  var defaults = _extends({}, settings);\n\n  var Breakpoints = {\n    /**\n     * Matches settings for currectly matching media breakpoint.\n     *\n     * @param {Object} points\n     * @returns {Object}\n     */\n    match: function match(points) {\n      if (typeof window.matchMedia !== 'undefined') {\n        for (var point in points) {\n          if (points.hasOwnProperty(point)) {\n            if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n              return points[point];\n            }\n          }\n        }\n      }\n\n      return defaults;\n    }\n  };\n\n  /**\n   * Overwrite instance settings with currently matching breakpoint settings.\n   * This happens right after component initialization.\n   */\n  _extends(settings, Breakpoints.match(points));\n\n  /**\n   * Update glide with settings of matched brekpoint:\n   * - window resize to update slider\n   */\n  Binder.on('resize', window, throttle(function () {\n    Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n  }, Glide.settings.throttle));\n\n  /**\n   * Resort and update default settings:\n   * - on reinit via API, so breakpoint matching will be performed with options\n   */\n  Events.on('update', function () {\n    points = sortBreakpoints(points);\n\n    defaults = _extends({}, settings);\n  });\n\n  /**\n   * Unbind resize listener:\n   * - on destroying, to bring markup to its initial state\n   */\n  Events.on('destroy', function () {\n    Binder.off('resize', window);\n  });\n\n  return Breakpoints;\n}\n\nvar COMPONENTS = {\n  Html: Html,\n  Translate: Translate,\n  Transition: Transition,\n  Direction: Direction,\n  Peek: Peek,\n  Sizes: Sizes,\n  Gaps: Gaps,\n  Move: Move,\n  Clones: Clones,\n  Resize: Resize,\n  Build: Build,\n  Run: Run\n};\n\nvar Glide$1 = function (_Core) {\n  inherits(Glide$$1, _Core);\n\n  function Glide$$1() {\n    classCallCheck(this, Glide$$1);\n    return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n  }\n\n  createClass(Glide$$1, [{\n    key: 'mount',\n    value: function mount() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n    }\n  }]);\n  return Glide$$1;\n}(Glide);\n\nexport default Glide$1;\nexport { swipe as Swipe, images as Images, anchors as Anchors, controls as Controls, keyboard as Keyboard, autoplay as Autoplay, breakpoints as Breakpoints };\n","import { addUrlHashParameter,\r\n    calcBorderWidth,\r\n    mergeObjects,\r\n    addUrlParameter,\r\n    getUrlHashParameterValue,\r\n    removeUrlHashParameter,\r\n    removeUrlParameter,\r\n    setCSSStyle\r\n} from './Helpers';\r\n\r\nwindow.Eventgallery = window.Eventgallery || {};\r\nif (typeof eventgallery !== 'undefined') {\r\n    Eventgallery.jQuery = eventgallery.jQuery;\r\n}\r\n\r\nEventgallery.Tools = {};\r\nEventgallery.Tools.mergeObjects = mergeObjects;\r\nEventgallery.Tools.calcBorderWidth = calcBorderWidth;\r\nEventgallery.Tools.addUrlHashParameter = addUrlHashParameter;\r\nEventgallery.Tools.getUrlHashParameterValue = getUrlHashParameterValue;\r\nEventgallery.Tools.removeUrlHashParameter = removeUrlHashParameter;\r\nEventgallery.Tools.addUrlParameter = addUrlParameter;\r\nEventgallery.Tools.removeUrlParameter = removeUrlParameter;\r\nEventgallery.Tools.setCSSStyle = setCSSStyle;\r\n","function removeElement(array, elm) {\r\n    const index = array.indexOf(elm);\r\n    if (index > -1) {\r\n        array.splice(index, 1);\r\n    }\r\n}\r\n\r\nfunction mergeObjects(defaults, options) {\r\n    if (options === null || defaults === null) {\r\n        return defaults;\r\n    }\r\n\r\n    for (let key in options) {\r\n        defaults[key] = options[key];\r\n    }\r\n\r\n    return defaults;\r\n}\r\n\r\n/**\r\n * calculates the border of the given elements with the given properties\r\n */\r\nfunction calcBorderWidth(elements, properties) {\r\n    let sum = 0;\r\n\r\n    for (let i=0; i<elements.length; i++) {\r\n        for (let j=0; j<properties.length; j++) {\r\n            let value = parseFloat( elements[i].css(properties[j]) );\r\n            if (!isNaN(value)) {\r\n                sum += value;\r\n            }\r\n        }\r\n    }\r\n\r\n    return sum;\r\n}\r\n\r\nfunction addUrlHashParameter(initialUrl, key, value) {\r\n    let url = removeUrlHashParameter(initialUrl, key),\r\n        fragments = url.split('#'),\r\n        urlpart = fragments[0],\r\n        hashparts = fragments.length>1? fragments[1].split(\"&\") : [],\r\n        result;\r\n\r\n    hashparts.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(value));\r\n\r\n    if (hashparts.length>0) {\r\n        result = urlpart + '#' + hashparts.join('&');\r\n    } else {\r\n        result = urlpart;\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction getUrlHashParameterValue(url, key) {\r\n    let fragments=url.split('#'),\r\n        hashparts = fragments.length>1? fragments[1].split(\"&\") : [],\r\n        result;\r\n\r\n    if (hashparts.length>0)\r\n    {\r\n        let prefix= encodeURIComponent(key)+'=';\r\n\r\n        for (let i=0; i<hashparts.length; i++) {\r\n            if (hashparts[i].indexOf(prefix, 0) === 0) {\r\n                result = hashparts[i].replace(prefix, '');\r\n            }\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction removeUrlHashParameter(url, key) {\r\n    let fragments=url.split('#'),\r\n        urlpart= fragments[0],\r\n        hashparts = fragments.length>1? fragments[1].split(\"&\") : [],\r\n        result;\r\n\r\n    if (hashparts.length>0)\r\n    {\r\n        let prefix= encodeURIComponent(key)+'=',\r\n            newHashParts = [];\r\n\r\n        for (let i=0; i<hashparts.length; i++) {\r\n            if (hashparts[i].indexOf(prefix, 0) === 0) {\r\n\r\n            } else {\r\n                newHashParts.push(hashparts[i]);\r\n            }\r\n        }\r\n        hashparts = newHashParts;\r\n    }\r\n\r\n    if (hashparts.length>0) {\r\n        result = urlpart + '#' + hashparts.join('&');\r\n    } else {\r\n        result = urlpart;\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction addUrlParameter(initialUrl, key, value) {\r\n    let url = removeUrlParameter(initialUrl, key),\r\n        fragments = url.split('#'),\r\n        urlparts= fragments[0].split('?'),\r\n        result;\r\n\r\n    if (urlparts.length === 1) {\r\n        result = urlparts[0] + '?' + encodeURIComponent(key) + \"=\" + encodeURIComponent(value);\r\n    } else {\r\n        result = urlparts.join('?') + '&' + encodeURIComponent(key) + \"=\" + encodeURIComponent(value);\r\n    }\r\n\r\n    if (fragments.length>1) {\r\n        return result + '#' + fragments[1];\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction removeUrlParameter(url, key) {\r\n    let fragments=url.split('#'),\r\n        urlparts= fragments[0].split('?'),\r\n        result;\r\n\r\n    if (urlparts.length>1)\r\n    {\r\n        let prefix= encodeURIComponent(key)+'=';\r\n        let pars= urlparts[1].split('&');\r\n\r\n        for (let i=0; i<pars.length; i++) {\r\n            if (pars[i].indexOf(prefix, 0) === 0) {\r\n                pars.splice(i, 1);\r\n            }\r\n        }\r\n        if (pars.length > 0) {\r\n            result = urlparts[0] + '?' + pars.join('&');\r\n        }\r\n        else {\r\n            result = urlparts[0];\r\n        }\r\n    }\r\n    else {\r\n        result =  urlparts[0];\r\n    }\r\n\r\n    if (fragments.length>1) {\r\n        return result + '#' + fragments[1];\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction setCSSStyle (nodes, style, value) {\r\n    for (let i=0; i<nodes.length; i++) {\r\n        nodes[i].style[style] = value;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param node HTMLElement\r\n */\r\nfunction getParents(node) {\r\n    let parents = [];\r\n\r\n    if (node === null) {\r\n        return parents;\r\n    }\r\n\r\n    while(node.parentElement != null) {\r\n        let parent = node.parentElement;\r\n        parents.push(parent);\r\n        node = parent;\r\n    }\r\n    return parents;\r\n}\r\n\r\n/*!\r\n * Serialize all form data into a query string\r\n * (c) 2018 Chris Ferdinandi, MIT License, https://gomakethings.com\r\n * Modified to use any HTML element instead of a form element.\r\n * @param  {Node}   form The form container to serialize\r\n * @return {String}      The serialized form data\r\n */\r\nvar serializeForm = function (form) {\r\n\r\n    // Setup our serialized data\r\n    var serialized = [];\r\n\r\n    let inputElements = form.querySelectorAll('input,select,textarea');\r\n    // Loop through each field in the form\r\n    for (var i = 0; i < inputElements.length; i++) {\r\n\r\n        var field = inputElements[i];\r\n\r\n        // Don't serialize fields without a name, submits, buttons, file and reset inputs, and disabled fields\r\n        if (!field.name || field.disabled || field.type === 'file' || field.type === 'reset' || field.type === 'submit' || field.type === 'button') continue;\r\n\r\n        // If a multi-select, get all selections\r\n        if (field.type === 'select-multiple') {\r\n            for (var n = 0; n < field.options.length; n++) {\r\n                if (!field.options[n].selected) continue;\r\n                serialized.push(encodeURIComponent(field.name) + \"=\" + encodeURIComponent(field.options[n].value));\r\n            }\r\n        }\r\n\r\n        // Convert field data to a query string\r\n        else if ((field.type !== 'checkbox' && field.type !== 'radio') || field.checked) {\r\n            serialized.push(encodeURIComponent(field.name) + \"=\" + encodeURIComponent(field.value));\r\n        }\r\n    }\r\n\r\n    return serialized.join('&');\r\n\r\n};\r\n\r\nexport { removeElement, addUrlHashParameter, calcBorderWidth, mergeObjects, addUrlParameter, getUrlHashParameterValue, removeUrlHashParameter, removeUrlParameter, setCSSStyle, getParents, serializeForm };","// Production steps of ECMA-262, Edition 6, 22.1.2.1\r\nif (!Array.from) {\r\n    Array.from = (function () {\r\n        var symbolIterator;\r\n        try {\r\n            symbolIterator = Symbol.iterator\r\n                ? Symbol.iterator\r\n                : 'Symbol(Symbol.iterator)';\r\n        } catch (e) {\r\n            symbolIterator = 'Symbol(Symbol.iterator)';\r\n        }\r\n\r\n        var toStr = Object.prototype.toString;\r\n        var isCallable = function (fn) {\r\n            return (\r\n                typeof fn === 'function' ||\r\n                toStr.call(fn) === '[object Function]'\r\n            );\r\n        };\r\n        var toInteger = function (value) {\r\n            var number = Number(value);\r\n            if (isNaN(number)) return 0;\r\n            if (number === 0 || !isFinite(number)) return number;\r\n            return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\r\n        };\r\n        var maxSafeInteger = Math.pow(2, 53) - 1;\r\n        var toLength = function (value) {\r\n            var len = toInteger(value);\r\n            return Math.min(Math.max(len, 0), maxSafeInteger);\r\n        };\r\n\r\n        var setGetItemHandler = function setGetItemHandler(isIterator, items) {\r\n            var iterator = isIterator && items[symbolIterator]();\r\n            return function getItem(k) {\r\n                return isIterator ? iterator.next() : items[k];\r\n            };\r\n        };\r\n\r\n        var getArray = function getArray(\r\n            T,\r\n            A,\r\n            len,\r\n            getItem,\r\n            isIterator,\r\n            mapFn\r\n        ) {\r\n            // 16. Let k be 0.\r\n            var k = 0;\r\n\r\n            // 17. Repeat, while k < len… or while iterator is done (also steps a - h)\r\n            while (k < len || isIterator) {\r\n                var item = getItem(k);\r\n                var kValue = isIterator ? item.value : item;\r\n\r\n                if (isIterator && item.done) {\r\n                    return A;\r\n                } else {\r\n                    if (mapFn) {\r\n                        A[k] =\r\n                            typeof T === 'undefined'\r\n                                ? mapFn(kValue, k)\r\n                                : mapFn.call(T, kValue, k);\r\n                    } else {\r\n                        A[k] = kValue;\r\n                    }\r\n                }\r\n                k += 1;\r\n            }\r\n\r\n            if (isIterator) {\r\n                throw new TypeError(\r\n                    'Array.from: provided arrayLike or iterator has length more then 2 ** 52 - 1'\r\n                );\r\n            } else {\r\n                A.length = len;\r\n            }\r\n\r\n            return A;\r\n        };\r\n\r\n        // The length property of the from method is 1.\r\n        return function from(arrayLikeOrIterator /*, mapFn, thisArg */) {\r\n            // 1. Let C be the this value.\r\n            var C = this;\r\n\r\n            // 2. Let items be ToObject(arrayLikeOrIterator).\r\n            var items = Object(arrayLikeOrIterator);\r\n            var isIterator = isCallable(items[symbolIterator]);\r\n\r\n            // 3. ReturnIfAbrupt(items).\r\n            if (arrayLikeOrIterator == null && !isIterator) {\r\n                throw new TypeError(\r\n                    'Array.from requires an array-like object or iterator - not null or undefined'\r\n                );\r\n            }\r\n\r\n            // 4. If mapfn is undefined, then let mapping be false.\r\n            var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\r\n            var T;\r\n            if (typeof mapFn !== 'undefined') {\r\n                // 5. else\r\n                // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\r\n                if (!isCallable(mapFn)) {\r\n                    throw new TypeError(\r\n                        'Array.from: when provided, the second argument must be a function'\r\n                    );\r\n                }\r\n\r\n                // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n                if (arguments.length > 2) {\r\n                    T = arguments[2];\r\n                }\r\n            }\r\n\r\n            // 10. Let lenValue be Get(items, \"length\").\r\n            // 11. Let len be ToLength(lenValue).\r\n            var len = toLength(items.length);\r\n\r\n            // 13. If IsConstructor(C) is true, then\r\n            // 13. a. Let A be the result of calling the [[Construct]] internal method\r\n            // of C with an argument list containing the single item len.\r\n            // 14. a. Else, Let A be ArrayCreate(len).\r\n            var A = isCallable(C) ? Object(new C(len)) : new Array(len);\r\n\r\n            return getArray(\r\n                T,\r\n                A,\r\n                len,\r\n                setGetItemHandler(isIterator, items),\r\n                isIterator,\r\n                mapFn\r\n            );\r\n        };\r\n    })();\r\n}","// Create Element.remove() function if not exist\r\nif (!('remove' in Element.prototype)) {\r\n    Element.prototype.remove = function() {\r\n        if (this.parentNode) {\r\n            this.parentNode.removeChild(this);\r\n        }\r\n    };\r\n}\r\n","import \"custom-event-polyfill\";\r\nimport \"whatwg-fetch\";\r\n\r\n// IE 11 polyfills\r\n    import 'core-js/es/symbol';\r\n    import 'core-js/es/object';\r\n    import 'core-js/es/map';\r\n    // DO NOT IMPORT Array.from => this will crash MooTools and Joomla3 is still using it.\r\n    import 'core-js/es/array/values'\r\n    require (\"./common/js/polyfill/array.from.js\");\r\n// END IE11 polyfills\r\n\r\nrequire (\"./common/js/polyfill/element.remove.js\");\r\n\r\nrequire('./common/js/EventgalleryTools.js');\r\n\r\nrequire('./frontend/js/EventgalleryCart.js');\r\nrequire('./frontend/js/EventgalleryBehavior.js');\r\nrequire('./frontend/js/EventgalleryImage.js');\r\nrequire('./frontend/js/EventgalleryRow.js');\r\nrequire('./frontend/js/EventgalleryImageList.js');\r\nrequire('./frontend/js/EventgalleryCart.js');\r\nrequire('./frontend/js/EventgalleryEventsList.js');\r\nrequire('./frontend/js/EventgalleryEventsTiles.js');\r\nrequire('./frontend/js/EventgalleryJSGallery2.js');\r\nrequire('./frontend/js/EventgalleryLazyload.js');\r\nrequire('./frontend/js/EventgallerySizeCalculator.js');\r\nrequire('./frontend/js/EventgallerySocialShareButton.js');\r\nrequire('./frontend/js/EventgallerySquareList.js');\r\nrequire('./frontend/js/EventgalleryTilesCollection.js');\r\nrequire('./frontend/js/EventgalleryTouch.js');\r\nrequire('./frontend/js/EventgalleryGooglePhotosProcessor.js');\r\nrequire('./frontend/js/EventgalleryCheckout.js');\r\n\r\nrequire('./frontend/js/Modules.js');\r\n\r\nrequire('./frontend/js/PhotoSwipeGallery.js');\r\nrequire('./frontend/js/PhotoSwipeGallerySlide.js');\r\n\r\nrequire('./frontend/less/eventgallery.less');\r\nrequire('./frontend/less/font-awesome/font-awesome.less');\r\n\r\nrequire(\"./photoswipe/photoswipe.css\");\r\nrequire(\"./photoswipe/default-skin/default-skin.css\");\r\n\r\n\r\n\r\n// Required Core Stylesheet\r\nimport \"@glidejs/glide/src/assets/sass/glide.core.scss\";\r\nimport \"./frontend/sass/glide/glide.theme.scss\";\r\n\r\n\r\n\r\n","import PhotoSwipeGallery from \"./PhotoSwipeGallery\";\r\nimport Overlay from \"./Overlay\";\r\nimport SliderStarter from \"./slider/SliderStarter\";\r\nimport Polyfill from \"./Polyfill\";\r\nimport EventgalleryLazyload from \"./EventgalleryLazyload\";\r\n\r\n(function(Eventgallery, jQuery){\r\n\t\"use strict\";\r\n    jQuery( document ).ready(function() {\r\n\r\n\t\t/*\r\n\t\t* GRID LIST OF EVENTS\r\n\t\t*/\r\n\r\n\t\tfunction triggerLazyLoading() {\r\n\t\t\tEventgalleryLazyload.watchImages();\r\n\t\t}\r\n\r\n        jQuery('.eventgallery-events-gridlist').each(function(index, container){\r\n        \tvar $container = jQuery(container);\r\n\t    \tvar $thumbnails = $container.find('.event-thumbnails .event-thumbnail');\r\n\r\n\t        var options = {\r\n\t            rowHeightPercentage: 100,\r\n\t            imagesetContainer: $container.find('.event-thumbnails').first(),\r\n\t            imageset: $thumbnails,\r\n\t            initComplete: function () {\r\n                    triggerLazyLoading();\r\n\t            },\r\n\t            resizeStart: function () {\r\n\r\n\t            },\r\n\t            resizeComplete: function () {\r\n\t                jQuery(window).trigger('scroll');\r\n\t            }\r\n\t        };\r\n\r\n\t        // initialize the imagelist\r\n\r\n\t        if ($thumbnails.length>0) {\r\n\t        \tnew Eventgallery.EventsList(options);\r\n\t        }\r\n        });\r\n\r\n\r\n\t\t/*\r\n\t\t* TILE LIST OF EVENTS\r\n\t\t*/\r\n\r\n\t    jQuery('.eventgallery-events-tiles-list').each(function(index, container){\r\n\t    \tvar $container = jQuery(container);\r\n\r\n\t        var options = {\r\n\t            imagesetContainer: $container.find('.event-thumbnails').first(),\r\n\t            imageset: $container.find('.event-thumbnail'),\r\n\t            eventgalleryTilesCollection: null,\r\n\t            initComplete: function () {\r\n\t\t\t\t\ttriggerLazyLoading();\r\n\r\n\t                var tilesOptions = {\r\n\t                    tiles: $container.find('.eventgallery-tiles .eventgallery-tile'),\r\n\t                    tilesContainer: $container.find('.eventgallery-tiles')\r\n\t                };\r\n\t                options.eventgalleryTilesCollection = new Eventgallery.TilesCollection(tilesOptions);\r\n\t                options.eventgalleryTilesCollection.calculate();\r\n\t                // we need to recalculate the whole thing because it might happen that a font loads\r\n\t                // and the size of a tile changes.\r\n\t\t\t\t\twindow.addEventListener('load', function(){\r\n\t                    options.eventgalleryTilesCollection.calculate();\r\n\t                });\r\n\r\n\t            },\r\n\t            resizeStart: function () {\r\n\r\n\t            },\r\n\t            resizeComplete: function () {\r\n\t                options.eventgalleryTilesCollection.calculate();\r\n\t                jQuery(window).trigger('scroll');\r\n\t            }\r\n\t        };\r\n\r\n\t        // initialize the imagelist\r\n\t        new Eventgallery.EventsTiles(options);\r\n\r\n\t    });\r\n\r\n\t\t/*\r\n\t\t* TILES LIST OF IMAGES\r\n\t\t*/\r\n\r\n\t    jQuery('.eventgallery-event-tiles-list').each(function(index, container){\r\n\t    \tvar $container = jQuery(container);\r\n\t        var options = {\r\n\t            imagesetContainer: $container.find('.event-thumbnails').first(),\r\n\t            imageset: $container.find('.event-thumbnail'),\r\n\t            adjustMode: 'width',\r\n\t            eventgalleryTilesCollection: null,\r\n\t            initComplete: function () {\r\n\r\n\t                var tilesOptions = {\r\n\t                    tiles: $container.find('.eventgallery-tiles .eventgallery-tile'),\r\n\t                    tilesContainer: $container.find('.eventgallery-tiles')\r\n\t                };\r\n\r\n                    options.eventgalleryTilesCollection = new Eventgallery.TilesCollection(tilesOptions);\r\n                    options.eventgalleryTilesCollection.calculate();\r\n\r\n\t                // we need to recalculate the whole thing because it might happen that a font loads\r\n\t                // and the size of a tile changes.\r\n\t                window.addEventListener('load', function(){\r\n\t                    options.eventgalleryTilesCollection.calculate();\r\n\t                });\r\n\r\n\t\t\t\t\ttriggerLazyLoading();\r\n\r\n\t            },\r\n\t            resizeStart: function () {\r\n\r\n\t            },\r\n\t            resizeComplete: function () {\r\n\t                options.eventgalleryTilesCollection.calculate();\r\n\t                jQuery(window).trigger('scroll');\r\n\t            }\r\n\t        };\r\n\r\n\t        // initialize the imagelist\r\n\t        new Eventgallery.EventsTiles(options);\r\n    \t});\r\n\r\n\t\t/*\r\n\t\t* SIMPLE IMAGE LIST\r\n\t\t*/\r\n\t\tjQuery('.eventgallery-event-gridlist').each(function(index, container){\r\n\t\t\tvar $container = jQuery(container);\r\n\t\t\tvar options = {\r\n                imagesetContainer: $container.find('.event-thumbnails').first(),\r\n                imageset: $container.find('.event-thumbnail'),\r\n                adjustMode: 'height',\r\n                initComplete: function () {\r\n                    var gridOptions = {\r\n                        tiles: $container.find('.eventgallery-simplelist .eventgallery-simplelist-tile'),\r\n                        tilesContainer: $container.find('.eventgallery-simplelist'),\r\n                        thumbSelector: '.event-thumbnail',\r\n                        thumbContainerSelector: '.event-thumbnails'\r\n                    };\r\n\r\n\t\t\t\t\ttriggerLazyLoading();\r\n                },\r\n                resizeStart: function () {\r\n\r\n                },\r\n                resizeComplete: function () {\r\n                    jQuery(window).trigger('scroll');\r\n                }\r\n            };\r\n\r\n            // initialize the imagelist\r\n            new Eventgallery.EventsTiles(options);\r\n\t\t});\r\n\r\n\t\t/*\r\n\t\t* IMAGE LIST\r\n\t\t*/\r\n\r\n        jQuery('.eventgallery-imagelist').each(function(index, imagesetContainer){\r\n\t\t\tvar $imagesetContainer = jQuery(imagesetContainer);\r\n            var options = {\r\n                rowHeight: $imagesetContainer.data('rowheight'),\r\n                rowHeightJitter: $imagesetContainer.data('rowheightjitter'),\r\n                firstImageRowHeight: $imagesetContainer.data('firstimagerowheight'),\r\n                doFillLastRow: $imagesetContainer.data('dofilllastrow') === true,\r\n                imagesetContainer: imagesetContainer,\r\n                imageset: $imagesetContainer.find('.thumbnail'),\r\n\r\n                initComplete: function () {\r\n\t\t\t\t\ttriggerLazyLoading();\r\n                },\r\n                resizeStart: function () {\r\n\r\n                },\r\n                resizeComplete: function () {\r\n                    jQuery(window).trigger('scroll');\r\n                }\r\n            };\r\n\r\n            // initialize the imagelist\r\n            new Eventgallery.Imagelist(options);\r\n        });\r\n\r\n\t\t/*\r\n\t\t * SQUARE SIZED LIST OF IMAGES\r\n\t\t */\r\n\r\n\t\tjQuery('.eventgallery-event-square-list').each(function(index, container){\r\n\t\t\tvar $container = jQuery(container);\r\n\t\t\tvar options = {\r\n\t\t\t\timagesetContainer: $container.find('.event-thumbnails').first(),\r\n\t\t\t\timageset: $container.find('.event-thumbnail'),\r\n\t\t\t\tadjustMode: 'width',\r\n\t\t\t\tinitComplete: function () {\r\n\t\t\t\t\ttriggerLazyLoading();\r\n\t\t\t\t},\r\n\t\t\t\tresizeStart: function () {\r\n\r\n\t\t\t\t},\r\n\t\t\t\tresizeComplete: function () {\r\n\t\t\t\t\tjQuery(window).trigger('scroll');\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// initialize the imagelist\r\n\t\t\tnew Eventgallery.SquareList(options);\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * sets the radio button if one clicks in a table row.\r\n\t\t */\r\n\t\tjQuery('.eventgallery-imagetype-selection-row').click(function(e){\r\n\t\t\tvar $target = jQuery(e.target);\r\n\t\t\t$target.closest('tr').find('input').prop(\"checked\", true);\r\n\t\t});\r\n\r\n\t\tjQuery( document ).on('touchend click', '.eventgallery-cart-connector', function(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tvar link = jQuery(e.target);\r\n\r\n\t\t\tif (!link.attr('data-href')) {\r\n\t\t\t\tlink = link.parent('SPAN');\r\n\t\t\t}\r\n\r\n\t\t\twindow.location.href = link.attr('data-href');\r\n\t\t});\r\n\r\n        /**\r\n\t\t * Lightbox init\r\n         * @type {PhotoSwipeGallery}\r\n         */\r\n        Eventgallery.lightbox = new PhotoSwipeGallery();\r\n        Eventgallery.lightbox.initPhotoSwipe();\r\n\r\n        /**\r\n\t\t * Single Image Page\r\n         */\r\n        jQuery('.singleimage-zoom').click(function(e){\r\n            e.preventDefault();\r\n            jQuery('#bigimagelink').click();\r\n        });\r\n\r\n        /**\r\n\t\t * content overlay\r\n         */\r\n        jQuery('a[data-eventgallery-overlay]').each(function(item){\r\n        \tlet contentId = this.getAttribute('href');\r\n        \tjQuery(this).click(function(e){\r\n                let overlay = new Overlay();\r\n\r\n                overlay.openOverlay(document.getElementById(contentId.replace(\"#\",\"\")).innerHTML);\r\n            })\r\n        });\r\n\r\n        if (window.EventGalleryLightboxConfiguration && window.EventGalleryLightboxConfiguration.doPreventRightClick) {\r\n            jQuery(document).on(\"contextmenu\", 'a[data-eg-lightbox] img, img.pswp__img', function(){\r\n                return false;\r\n            });\r\n        }\r\n\r\n        let googlePhotosProcessor = new Eventgallery.GooglePhotosProcessor();\r\n        document.dispatchEvent(Polyfill.createNewEvent('eventgallery-images-added'));\r\n\r\n\r\n        let sliderElements = document.querySelectorAll('div[data-slider=\"1\"]');\r\n\r\n\r\n        for(let i=0; i<sliderElements.length; i++) {\r\n            let sliderStarter = new SliderStarter(sliderElements[i]);\r\n            let timer = null;\r\n            sliderStarter.start();\r\n\r\n            window.addEventListener(\"resize\", () => {\r\n            \tif (timer != null) {\r\n            \t\tclearTimeout(timer);\r\n\t\t\t\t}\r\n            \ttimer = setTimeout(() => sliderStarter.start(), 1000);\r\n            }, false);\r\n        }\r\n\r\n\r\n\r\n    }); //end domready\r\n})(Eventgallery, Eventgallery.jQuery);\r\n\r\n","import Overlay from \"./Overlay\";\r\nimport Polyfill from \"./Polyfill\";\r\n\r\n(function(Eventgallery, jQuery){\r\n\r\n\r\n    Eventgallery.Cart = function(newOptions) {\r\n        this.cart = [];\r\n        this.isMultiline = false;\r\n        this.options = {\r\n            buttonShowType: 'block',\r\n            emptyCartSelector: '.eventgallery-cart-empty',\r\n            cartSelector: '.eventgallery-ajaxcart',\r\n            cartItemContainerSelector: '.cart-items-container',\r\n            cartItemsSelector: '.eventgallery-ajaxcart .cart-items',\r\n            cartItemSelector: '.eventgallery-ajaxcart .cart-items .cart-item',\r\n            cartCountSelector: '.itemscount',\r\n            buttonDownSelector: '.toggle-down',\r\n            buttonUpSelector: '.toggle-up',\r\n            cartItemsMinHeight: null,\r\n            removeUrl: \"\",\r\n            add2cartUrl: \"\",\r\n            getCartUrl: \"\",\r\n            removeLinkTitle: \"Remove\"\r\n        };\r\n        this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n        this.initialize();\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.slideUp = function() {\r\n        jQuery(this.options.cartItemContainerSelector).animate({height: this.options.cartItemsMinHeight});\r\n        jQuery(this.options.buttonUpSelector).css('display', 'none');\r\n        if (this.isMultiline) {\r\n            jQuery(this.options.buttonDownSelector).css('display', this.options.buttonShowType);\r\n        } else {\r\n            jQuery(this.options.buttonDownSelector).css('display', 'none');\r\n        }\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.slideDown = function() {\r\n        jQuery(this.options.cartItemContainerSelector).animate({height: jQuery(this.options.cartItemsSelector).height()});\r\n        jQuery(this.options.buttonDownSelector).css('display', 'none');\r\n        jQuery(this.options.buttonUpSelector).css('display', this.options.buttonShowType);\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.initialize = function() {\r\n\r\n        jQuery(this.options.buttonDownSelector).click(jQuery.proxy(function (event) {\r\n            event.preventDefault();\r\n            this.slideDown();\r\n        }, this));\r\n\r\n        jQuery(this.options.buttonUpSelector).click(jQuery.proxy(function (event) {\r\n            event.preventDefault();\r\n            this.slideUp();\r\n        }, this));\r\n\r\n        let $document = jQuery( document );\r\n\r\n        $document.off('change', '.eventgallery-cartquantity');\r\n        $document.on ('change', '.eventgallery-cartquantity', jQuery.proxy(this.updateQuantity, this));\r\n\r\n\r\n        $document.off('click', '.eventgallery-openAdd2cart');\r\n        $document.on ('click', '.eventgallery-openAdd2cart', jQuery.proxy(this.openOverlay, this));\r\n\r\n        $document.off('touchend click', '.eventgallery-opencart');\r\n        $document.on ('touchend click', '.eventgallery-opencart', jQuery.proxy(this.openCart, this));\r\n\r\n        $document.off('touchend click', '.eventgallery-qtyplus');\r\n        $document.on ('touchend click', '.eventgallery-qtyplus', jQuery.proxy(this.quantityPlus, this));\r\n\r\n        $document.off('touchend click', '.eventgallery-qtyminus');\r\n        $document.on ('touchend click', '.eventgallery-qtyminus', jQuery.proxy(this.quantityMinus, this));\r\n\r\n        $document.off('touchend click', '.eventgallery-removeFromCart');\r\n        $document.on ('touchend click', '.eventgallery-removeFromCart', jQuery.proxy(this.removeFromCart, this));\r\n\r\n        $document.on('updatecartlinks', jQuery.proxy(function (event) {\r\n            this.populateCart(true);\r\n        }, this));\r\n\r\n        $document.on('updatecart', jQuery.proxy(function (event, cart) {\r\n            this.cart = cart;\r\n            this.populateCart(false);\r\n        }, this));\r\n\r\n        this.updateCart();\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.openOverlay = function(e) {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n\r\n        var link = jQuery(e.target);\r\n        if (!link.attr('data-id')) {\r\n            link = link.parent('[data-id]');\r\n        }\r\n\r\n        let overlay = new Overlay();\r\n        overlay.openOverlay(EventGalleryCartConfiguration.add2carturl + '&' + link.attr('data-id'));\r\n\r\n        return false;\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.openCart = function(e) {\r\n        let $button;\r\n        if (e.target.tagName !== 'BUTTON') {\r\n            $button = jQuery(e.target).parent('button');\r\n        } else {\r\n            $button = jQuery(e.target);\r\n        }\r\n        e.preventDefault();\r\n        window.location.href = $button.attr('data-href');\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.updateCartItemContainer = function () {\r\n\r\n        // detect multiple rows\r\n\r\n        this.isMultiline = false;\r\n        var y = -1;\r\n        var currentObject =  this;\r\n\r\n        jQuery(this.options.cartItemSelector).each(function () {\r\n            var posY = jQuery(this).position().top;\r\n            if (y < 0) {\r\n                y = posY;\r\n            } else if (y != posY) {\r\n                currentObject.isMultiline = true;\r\n            }\r\n        });\r\n\r\n        if (this.isMultiline) {\r\n            // prevent showing the wrong button. Basically this is an inital action if a second row is created.\r\n            var down = jQuery(this.options.buttonDownSelector);\r\n            var up = jQuery(this.options.buttonUpSelector);\r\n\r\n            if (down.css('display') == 'none' && up.css('display') == 'none') {\r\n                down.css('display', this.options.buttonShowType);\r\n            } else {\r\n                // update if a third or more row is created\r\n                if (up.css('display') != 'none') {\r\n                    // timeout to avoid any size issues because of a slow browser\r\n                    setTimeout(jQuery.proxy(function() {\r\n                        this.slideDown();\r\n                    }, this), 1000);\r\n                }\r\n            }\r\n        } else {\r\n            this.slideUp();\r\n        }\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.populateCart = function (linksOnly) {\r\n\r\n        if (this.cart.length === 0) {\r\n            jQuery(this.options.cartSelector).slideUp();\r\n            jQuery(this.options.emptyCartSelector).slideDown();\r\n        } else {\r\n            jQuery(this.options.cartSelector).slideDown();\r\n            jQuery(this.options.emptyCartSelector).slideUp();\r\n        }\r\n        // define where all the cart html items are located\r\n\r\n        var cartHTML = jQuery(this.options.cartItemsSelector);\r\n        if (cartHTML === null) {\r\n            return;\r\n        }\r\n        // clear the html showing the current cart\r\n        if (!linksOnly) {\r\n            cartHTML.html(\"\");\r\n        }\r\n\r\n        // reset cart button icons\r\n        jQuery('.eventgallery-add2cart i.egfa').addClass('egfa-cart-plus').removeClass('egfa-shopping-cart');\r\n\r\n\r\n        for (var i = this.cart.length - 1; i >= 0; i--) {\r\n            //create the id. It's always folder=foo&file=bar\r\n            var id = 'folder=' + encodeURIComponent(this.cart[i].folder) + '&file=' + encodeURIComponent(this.cart[i].file);\r\n            //add the item to the cart. Currently we simple refresh the whole cart.\r\n            if (!linksOnly) {\r\n                cartHTML.html(cartHTML.html() +\r\n                    '<div class=\"cart-item\"><span class=\"badge badge-pill badge-info\">'+this.cart[i].count+'</span>' +\r\n                    this.cart[i].imagetag +\r\n                    '<a href=\"#\" title=\"' + this.options.removeLinkTitle + '\" class=\"button-removeFromCart eventgallery-removeFromCart\" data-id=\"lineitemid=' + this.cart[i].lineitemid + '\">'+\r\n                    '<i class=\"egfa egfa-2x egfa-remove\"></i>' +\r\n                    '</a></div>');\r\n            }\r\n            // mark the add2cart link to show the item is already in the cart\r\n            jQuery('.eventgallery-add2cart[data-id*=\\'' + id + '\\'] i.egfa').addClass('egfa-shopping-cart').removeClass('egfa-cart-plus');\r\n        }\r\n\r\n        if (!linksOnly) {\r\n            cartHTML.html(cartHTML.html() + '<div style=\"clear:both\"></div>');\r\n            if (null === this.options.cartItemsMinHeight) {\r\n                this.options.cartItemsMinHeight = jQuery(this.options.cartItemContainerSelector).height();\r\n            }\r\n            this.updateCartItemContainer();\r\n        }\r\n\r\n        jQuery('.itemscount').html(this.cart.length);\r\n\r\n        if (Eventgallery !== undefined && Eventgallery.lightbox !== undefined) {\r\n            Eventgallery.lightbox.reload();\r\n        }\r\n\r\n        // tigger the loading of Google Photos images for example.\r\n        document.dispatchEvent(Polyfill.createNewEvent('eventgallery-images-added'));\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.updateCart = function () {\r\n        jQuery.getJSON(\r\n            this.options.getCartUrl,\r\n            {json: 'yes'},\r\n            function (data) {\r\n                if (data !== undefined) {\r\n                    jQuery(document).trigger( 'updatecart', [data] );\r\n                }\r\n            }\r\n        );\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.removeFromCart = function (event) {\r\n        return this.doRequest(event, this.options.removeUrl);\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.updateQuantity = function (event) {\r\n\r\n        var $inputFild = jQuery(event.target),\r\n            imagetypeid = $inputFild.data('imagetypeid'),\r\n            quantity = parseInt($inputFild.val()),\r\n            data = $inputFild.data('id');\r\n\r\n        event.preventDefault();\r\n        data = data + '&quantity=' + quantity;\r\n        return this.doRequest(event, this.options.add2cartUrl, data);\r\n\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.quantityPlus = function(e) {\r\n        e.preventDefault();\r\n\r\n        var fieldName = jQuery(e.target).attr('field'),\r\n            inputField = jQuery('input[name='+fieldName+']'),\r\n            currentVal = parseInt(inputField.val());\r\n\r\n        if (!isNaN(currentVal)) {\r\n            var maxOrderQuantity = inputField.data('maxorderquantity');\r\n            if (maxOrderQuantity === 0 || inputField.val()<maxOrderQuantity) {\r\n                inputField.val(currentVal + 1);\r\n            }\r\n            inputField.change();\r\n        } else {\r\n            inputField.val(0);\r\n        }\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.quantityMinus = function(e) {\r\n        e.preventDefault();\r\n\r\n        var fieldName = jQuery(e.target).attr('field'),\r\n            inputField = jQuery('input[name='+fieldName+']'),\r\n            currentVal = parseInt(inputField.val());\r\n\r\n        if (!isNaN(currentVal) && currentVal > 0) {\r\n            inputField.val(currentVal - 1).change();\r\n        } else {\r\n            inputField.val(0);\r\n        }\r\n    };\r\n\r\n    Eventgallery.Cart.prototype.doRequest = function (event, url, data) {\r\n\r\n        event.preventDefault();\r\n\r\n        var linkElement = jQuery(event.target);\r\n\r\n        if (!linkElement.attr('data-id')) {\r\n            linkElement = linkElement.parent('[data-id]');\r\n        }\r\n\r\n        var iconElement = linkElement.children('i');\r\n        if (data === undefined) {\r\n            data = linkElement.attr('data-id');\r\n        }\r\n\r\n        iconElement.removeClass(\"egfa-cart-plus\").removeClass(\"egfa-shopping-cart\").addClass('egfa-spin egfa-gear');\r\n\r\n        jQuery.getJSON(\r\n            url,\r\n            data,\r\n            function (data) {\r\n\r\n                if (data !== undefined) {\r\n                    jQuery(document).trigger( 'updatecart', [data] );\r\n                }\r\n\r\n                iconElement.removeClass('egfa-spin').removeClass('egfa-gear').addClass('');\r\n\r\n            }\r\n        );\r\n\r\n        return true;\r\n    };\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n\r\n","(function(){\r\n\r\n    function switchStates(e) {\r\n        let target = e.target;\r\n        let id = target.id;\r\n        let countryId = target.options[target.selectedIndex].value;\r\n        let stateId = id.replace('_country','_state');\r\n        let stateField = document.getElementById(stateId);\r\n\r\n        if (!stateField) {\r\n            return;\r\n        }\r\n\r\n        let optGroups = stateField.querySelectorAll('optgroup');\r\n\r\n        for (let i=0; i<optGroups.length; i++) {\r\n            console.log(i);\r\n            let optGroup = optGroups[i];\r\n            if (optGroup.id === stateId + '_' + countryId || optGroup.id === stateId + '_nocountry') {\r\n                optGroup.style.display = 'block';\r\n            } else {\r\n                optGroup.style.display = 'none';\r\n            }\r\n        }\r\n\r\n        let selectedStateOption = stateField.options[stateField.selectedIndex];\r\n        if (selectedStateOption.parentElement.style.display === 'none') {\r\n            stateField.selectedIndex = 0;\r\n        }\r\n\r\n\r\n    }\r\n\r\n    document.addEventListener('checkout-address-country-changed', (e) => {\r\n        console.log(e);\r\n        switchStates(e);\r\n    })\r\n\r\n})();\r\n\r\n","(function(Eventgallery, jQuery){\r\n\r\nEventgallery.EventsList = function(newOptions) {\r\n    Eventgallery.Imagelist.call(this, newOptions);\r\n};\r\n\r\nEventgallery.EventsList.prototype = new Eventgallery.Imagelist();\r\nEventgallery.EventsList.prototype.constructor = Eventgallery.EventsList;\r\n\r\n\r\nEventgallery.EventsList.prototype.processList = function() {\r\n    /* processes the image list*/    \r\n    var width = this.width;\r\n    var currentObject = this;\r\n    jQuery.each(this.images, function () {\r\n        var height = Math.ceil(width * currentObject.options.rowHeightPercentage / 100);\r\n        this.setSize(width, height);\r\n    });\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n","(function(Eventgallery, jQuery){\r\n\r\n/* processes a list of images and tries to resize separately*/\r\nEventgallery.EventsTiles = function(newOptions) {\r\n    Eventgallery.Imagelist.call(this, newOptions);\r\n};\r\n\r\nEventgallery.EventsTiles.prototype = new Eventgallery.Imagelist();\r\nEventgallery.EventsTiles.prototype.constructor = Eventgallery.EventsTiles;\r\n\r\nEventgallery.EventsTiles.prototype.processList = function() {\r\n    var width = this.width;\r\n    var currentObject = this;\r\n      \t \r\n    jQuery.each(this.images, function () {\r\n        var newHeight = Math.round(this.height / this.width * width);\r\n        var newWidth = width;\r\n        if (currentObject.options.adjustMode == \"height\" && this.height>this.width) {\r\n            newHeight = width;\r\n            newWidth = Math.round(this.width / this.height * newHeight);\r\n        }\r\n\r\n        this.setSize(newWidth, newHeight);\r\n        \r\n    });\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n\r\n","import URLHelper from \"./URLHelper\";\r\n\r\n(function(Eventgallery){\r\n\r\n    const LOADING_MATCHER = 'gp.svg';\r\n    const MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE = 'data-eg-gp-processing';\r\n\r\nEventgallery.GooglePhotosProcessor = class {\r\n\r\n\r\n\r\n    constructor() {\r\n\r\n        this.albumUrl = \"\";\r\n        this.albumsUrl = \"\";\r\n\r\n        // noinspection JSUnresolvedVariable\r\n        if (window.EventGalleryGooglePhotosConfiguration) {\r\n            this.albumUrl = window.EventGalleryGooglePhotosConfiguration.albumUrl;\r\n            this.albumsUrl = window.EventGalleryGooglePhotosConfiguration.albumsUrl;\r\n        }\r\n\r\n        this.imageAddedCallback = (e) => this.processImages(e);\r\n        document.addEventListener(\"eventgallery-images-added\", this.imageAddedCallback, true);\r\n    };\r\n\r\n    destroy() {\r\n        document.removeEventListener(\"eventgallery-images-added\", this.imageAddedCallback, true);\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    processImages(e) {\r\n        let doReloadLightbox = true;\r\n        if (e?.detail?.isOverlay) {\r\n            doReloadLightbox = false;\r\n        }\r\n        let albums = this._groupByAlbum(this._collectHTMLElements());\r\n        this._markImagesAsInProgress(albums);\r\n        this._getMainImageDataFromServer(albums, doReloadLightbox);\r\n    }\r\n\r\n    // noinspection JSMethodCanBeStatic\r\n    /**\r\n     * Grabs IMG tag items from the DOM for Google Photos image placeholder.\r\n     *\r\n     * @returns <Element>[]\r\n     * @private\r\n     */\r\n     _collectHTMLElements() {\r\n        let htmlCollection = document.getElementsByTagName('IMG');\r\n\r\n        let foundImageHTMLElements = /** @type {HTMLElement} */[...htmlCollection];\r\n\r\n        let result = foundImageHTMLElements.filter(img => {\r\n            let backgroundImage = img.style.backgroundImage;\r\n            let dataSrc = img.getAttribute('data-src');\r\n            let src = img.src;\r\n\r\n            if (img.getAttribute(MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE) === '1') {\r\n                return false;\r\n            }\r\n\r\n            return (backgroundImage && backgroundImage.indexOf(LOADING_MATCHER)>0)\r\n                || (dataSrc && dataSrc.indexOf(LOADING_MATCHER)>0)\r\n                || (src && src.indexOf(LOADING_MATCHER)>0);\r\n        });\r\n\r\n        htmlCollection = document.getElementsByTagName('A');\r\n        let foundLinkHTMLElements = /** @type {HTMLElement} */[...htmlCollection];\r\n        result = result.concat(foundLinkHTMLElements.filter(a => {\r\n            let dataSrc = a.getAttribute('data-src');\r\n            let rel = a.getAttribute('rel');\r\n            let href = a.getAttribute('href');\r\n\r\n            if (a.getAttribute(MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE) === '1') {\r\n                return false;\r\n            }\r\n            return (href && href.indexOf(LOADING_MATCHER)>0)\r\n                || (dataSrc && dataSrc.indexOf(LOADING_MATCHER)>0)\r\n                || (rel && rel.indexOf(LOADING_MATCHER)>0);\r\n        }));\r\n\r\n        return result;\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param albums {Map<any, any>}\r\n     * @private\r\n     */\r\n    _markImagesAsInProgress(albums) {\r\n        for (let [foldername, album] of albums) {\r\n            /**\r\n             * @var ParsedHTMLElement parsedHTMLElement\r\n             */\r\n            album.forEach(parsedHTMLElement => {\r\n              parsedHTMLElement.getHTMLElement().setAttribute(MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE, 1);\r\n            })\r\n        }\r\n    }\r\n\r\n    /**\r\n     * sorts all found images into a map: key=folder, value=array of\r\n     *\r\n     * @param htmlElements\r\n     * @returns {Map<any, any>}\r\n     * @private\r\n     */\r\n    _groupByAlbum(htmlElements) {\r\n        let albums = new Map();\r\n        htmlElements.forEach((imageHTMLElement) => {\r\n           let parsedHTMLElement = this._parseHTMLElement(imageHTMLElement);\r\n            parsedHTMLElement.updateParameters();\r\n           let folder = parsedHTMLElement.parameters.get('folder');\r\n\r\n           if (!albums.get(folder)) {\r\n             albums.set(folder, []);\r\n           }\r\n\r\n           albums.get(folder).push(parsedHTMLElement);\r\n        });\r\n\r\n        return albums;\r\n    }\r\n\r\n    // noinspection JSMethodCanBeStatic\r\n    /**\r\n     *\r\n     * @param htmlElement\r\n     * @returns {ParsedHTMLElement}\r\n     * @private\r\n     */\r\n    _parseHTMLElement(htmlElement) {\r\n        if (htmlElement.tagName === 'IMG') {\r\n            return new ParsedImageHTMLElement(htmlElement);\r\n        }\r\n        return new ParsedLinkHTMLElement(htmlElement);\r\n    }\r\n\r\n\r\n    /**\r\n     * starts several requests to the server to determine\r\n     *\r\n     * @param albums\r\n     * @private\r\n     */\r\n    _getAlbumDataFromServer(albums, doReloadLightbox) {\r\n        for (let [foldername, album] of albums) {\r\n            this._doAlbumRequest(foldername, album, doReloadLightbox);\r\n        }\r\n    }\r\n\r\n    _doAlbumRequest(foldername, album, doReloadLightbox) {\r\n        if (!this.albumUrl) return;\r\n        fetch(this.albumUrl + '&folder=' + foldername)\r\n            .then(response => response.json())\r\n            .then(data => this._processAlbumResult(album, data, doReloadLightbox));\r\n    }\r\n\r\n    _processAlbumResult(album, data, doReloadLightbox) {\r\n        this._replaceImages(album, data, doReloadLightbox);\r\n    }\r\n\r\n    _getMainImageDataFromServer(albums, doReloadLightbox) {\r\n        let albumsWithMainImagesOnly = this._filterForAlbumsWithMainImageOnly(albums);\r\n\r\n        if (albumsWithMainImagesOnly.size > 0) {\r\n            this._doAlbumsRequest(albumsWithMainImagesOnly, albums, doReloadLightbox);\r\n            for (let [foldername, album] of albumsWithMainImagesOnly) {\r\n                albums.delete(foldername);\r\n            }\r\n        }\r\n\r\n        this._getAlbumDataFromServer(albums, doReloadLightbox);\r\n    }\r\n\r\n    _doAlbumsRequest(albumsWithMainImagesOnly, albums, doReloadLightbox) {\r\n        if (!this.albumsUrl) return;\r\n        fetch(this.albumsUrl)\r\n            .then(response => response.json())\r\n            .then(data => this._processAlbumsResult(albumsWithMainImagesOnly, albums, data, doReloadLightbox));\r\n    }\r\n\r\n    _processAlbumsResult(albumsWithMainImagesOnly, albums, data, doReloadLightbox) {\r\n        for (let [key, album] of albumsWithMainImagesOnly) {\r\n            this._replaceImages(album, data[key], doReloadLightbox);\r\n        }\r\n        this._getAlbumDataFromServer(albums, doReloadLightbox);\r\n    }\r\n\r\n    // noinspection JSMethodCanBeStatic\r\n    _filterForAlbumsWithMainImageOnly(albums) {\r\n        let newAlbums = new Map();\r\n        for(let [key, album] of albums) {\r\n            let mainImages = album.filter(image => image.isMainImage());\r\n\r\n            if (mainImages.length> 0 && mainImages.length === album.length) {\r\n                newAlbums.set(key, album);\r\n            }\r\n        }\r\n        return newAlbums;\r\n    }\r\n\r\n    _replaceImages(album, serverResult, doReloadLightbox) {\r\n        if (album === undefined || serverResult === undefined) {\r\n            return;\r\n        }\r\n\r\n        album.forEach(parsedImageHTMLElement => {\r\n            let imageUrl = serverResult[parsedImageHTMLElement.getFile()];\r\n            if (imageUrl === undefined) {\r\n                return false;\r\n            }\r\n\r\n            parsedImageHTMLElement.updateParameters();\r\n            parsedImageHTMLElement.replaceElementLinks(imageUrl);\r\n            parsedImageHTMLElement.getHTMLElement().setAttribute(MARKER_IMAGE_IS_IN_PROGRESS_ATTRIBUTE, 0);\r\n\r\n        });\r\n\r\n        if (doReloadLightbox && Eventgallery.lightbox) {\r\n            if (Eventgallery.lightbox.isOpen()) {\r\n                let link = Eventgallery.lightbox.getCurrentSlide().thumbnailContainer;\r\n                Eventgallery.lightbox._gallery.close();\r\n                setTimeout(()=>link.click(),500);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nclass ParsedHTMLElement {\r\n    constructor(htmlElement) {\r\n        this.htmlElement = htmlElement;\r\n        this.parameters = null;\r\n        this.attributeNames = new Set();\r\n        this.styleAttributeNames = new Set();\r\n    }\r\n\r\n    updateParametersWithUrl(url) {\r\n        let parameterString = url.substring(url.indexOf('#')+1);\r\n        this.parameters = URLHelper.parseURLParameter(parameterString);\r\n    }\r\n\r\n    updateParameters() {\r\n        for(let n of this.attributeNames) {\r\n            let url = this.getHTMLElement().getAttribute(n);\r\n            if (url && url.indexOf(LOADING_MATCHER)>0) {\r\n                this.updateParametersWithUrl(url);\r\n                return;\r\n            }\r\n        }\r\n\r\n        for(let n of this.styleAttributeNames) {\r\n            let url = URLHelper.extractBackgroudUrl(this.getHTMLElement().style[n]);\r\n            if (url && url.indexOf(LOADING_MATCHER)>0) {\r\n                this.updateParametersWithUrl(url);\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    replaceElementLinks(imageUrl) {\r\n\r\n        for(let n of this.attributeNames) {\r\n            let url = this.getHTMLElement().getAttribute(n);\r\n            if (url && url.indexOf(LOADING_MATCHER)>0) {\r\n                this.getHTMLElement().setAttribute(n, this.getImageUrl(imageUrl, this.getWidth(url)));\r\n            }\r\n        }\r\n\r\n        for(let n of this.styleAttributeNames) {\r\n            let url = URLHelper.extractBackgroudUrl(this.getHTMLElement().style[n]);\r\n            if (url && url.indexOf(LOADING_MATCHER)>0) {\r\n                this.getHTMLElement().style[n] = 'url(' + this.getImageUrl(imageUrl, this.getWidth(url)) + ')';\r\n            }\r\n        }\r\n    }\r\n\r\n    getHTMLElement() {\r\n        return this.htmlElement;\r\n    }\r\n\r\n    getFolder() {\r\n        return this.parameters.get('folder');\r\n    }\r\n\r\n    getFile() {\r\n        return this.parameters.get('file');\r\n    }\r\n\r\n\r\n    getWidth(url) {\r\n        return URLHelper.parseURLParameter(url).get('width');\r\n    }\r\n\r\n    getImageUrl(imageUrl, width) {\r\n        return imageUrl + '=w' + width;\r\n    }\r\n\r\n    isMainImage() {\r\n        return this.parameters.get('m') === '1';\r\n    }\r\n}\r\n\r\nclass ParsedLinkHTMLElement extends ParsedHTMLElement {\r\n\r\n    constructor(htmlElement) {\r\n        super(htmlElement);\r\n        this.attributeNames = new Set(['href', 'data-src', 'rel']);\r\n    }\r\n\r\n}\r\n\r\nclass ParsedImageHTMLElement extends ParsedHTMLElement{\r\n\r\n    constructor(htmlElement) {\r\n        super(htmlElement);\r\n        this.attributeNames = new Set(['src', 'data-src']);\r\n        this.styleAttributeNames = new Set(['backgroundImage']);\r\n    }\r\n}\r\n\r\n\r\n})(Eventgallery);\r\n","(function(Eventgallery, jQuery){\r\n\r\n    /*\r\n     Class to manage an image. This can be the img tag or a container. It has to manage glue itself.\r\n     */\r\n    Eventgallery.Image = function(image, index, newOptions) {\r\n\r\n        this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n        this.tag = jQuery(image);\r\n        this.index = index;\r\n        this.calculatedWidth = 0;\r\n        this.calcSize();\r\n    };\r\n\r\n    Eventgallery.Image.prototype.calcSize = function () {\r\n        // glue includes everything but the image width/heigt: margin, padding, border\r\n        var image = this.tag.find('img').first();\r\n\r\n        if (image.length === 0) {\r\n            return;\r\n        }\r\n\r\n        var elements = [this.tag, image];\r\n\r\n        this.glueLeft = Eventgallery.Tools.calcBorderWidth(elements, ['padding-left', 'margin-left', 'border-left-width']);\r\n        this.glueRight = Eventgallery.Tools.calcBorderWidth(elements, ['padding-right', 'margin-right', 'border-right-width']);\r\n        this.glueTop = Eventgallery.Tools.calcBorderWidth(elements, ['padding-top', 'margin-top', 'border-top-width']);\r\n        this.glueBottom = Eventgallery.Tools.calcBorderWidth(elements, ['padding-bottom', 'margin-bottom', 'border-bottom-width']);\r\n\r\n        // get image size from data- attributes\r\n\r\n        this.width = image.data(\"width\");\r\n        this.height = image.data(\"height\");\r\n\r\n\r\n        // fallback of data- attributes are not there\r\n        if (this.width === undefined) {\r\n            this.width = this.tag.width() - this.glueLeft - this.glueRight;\r\n        }\r\n\r\n        if (this.height === undefined) {\r\n            this.height = this.tag.height() - this.glueTop - this.glueBottom;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * calculates the height of that image container. This includes the image and the gap on top/bottom\r\n     *\r\n     * @returns float\r\n     */\r\n    Eventgallery.Image.prototype.getImageTagHeight = function() {\r\n        return parseFloat(window.getComputedStyle(this.tag[0]).height) + this.glueTop + this.glueBottom;\r\n    };\r\n\r\n    Eventgallery.Image.prototype.setSize = function (width, height) {\r\n\r\n        var isFlickr = false;\r\n        var newWidth = width - this.glueLeft - this.glueRight;\r\n        var newHeight = height - this.glueTop - this.glueBottom;\r\n\r\n\r\n        var ratio = this.width / this.height;\r\n\r\n        //console.log(\"the size of the image should be: \"+width+\"x\"+height+\" so I have to set it to: \"+newWidth+\"x\"+newHeight);\r\n        //adjust background images\r\n        var image = this.tag.find('img');\r\n        if (image.length === 0) {\r\n            return;\r\n        }\r\n\r\n        var sizeCalculator = new Eventgallery.SizeCalculator();\r\n\r\n        // set a new background image\r\n        var backgroundImageStyle = image.css('background-image');\r\n        var dataSrc = image.attr('data-src');\r\n        if (!dataSrc) {\r\n            dataSrc = \"\";\r\n        }\r\n\r\n        var secret = image.data('secret');\r\n\r\n        if (secret !== undefined) {\r\n            var secret_o = image.data('secret_o'),\r\n                secret_h = image.data('secret_h'),\r\n                secret_k = image.data('secret_k'),\r\n                farm = image.data('farm'),\r\n                server = image.data('server'),\r\n                id = image.data('id');\r\n            var imageUrl = sizeCalculator.getFlickrURL(farm,  server, secret, secret_h, secret_k, secret_o, id, newWidth, newHeight, this.width, this.height);\r\n\r\n            if (backgroundImageStyle !== 'none' ) {\r\n                backgroundImageStyle = \"url('\" + imageUrl + \"')\";\r\n            }\r\n            dataSrc = imageUrl;\r\n\r\n            isFlickr = true;\r\n\r\n        } else {\r\n\r\n            var googleWidth = sizeCalculator.getSize(newWidth, newHeight, ratio);\r\n\r\n            backgroundImageStyle = sizeCalculator.adjustImageURL(backgroundImageStyle, googleWidth);\r\n            dataSrc = sizeCalculator.adjustImageURL(dataSrc, googleWidth);\r\n        }\r\n\r\n        image.css('background-image', backgroundImageStyle);\r\n        image.attr('data-src', dataSrc);\r\n        image.css('display', 'block');\r\n        image.css('margin', 'auto');\r\n\r\n        // IE8 fix: check the width/height first\r\n        if (newWidth>0) {\r\n            image.css('width', newWidth);\r\n        }\r\n        if (newHeight>0) {\r\n            image.css('height', newHeight);\r\n        }\r\n\r\n    };\r\n\r\n})(Eventgallery, Eventgallery.jQuery);","(function(Eventgallery, jQuery){\r\n\r\nEventgallery.Imagelist = function(newOptions) {\r\n\r\n    this.options = {\r\n        rowHeightPercentage: 100,\r\n        rowHeight: 150,\r\n        rowHeightJitter: 0,\r\n        minImageWidth: 150,\r\n        // resize the last image to full width\r\n        doFillLastRow: false,\r\n        // the object where we try to get the width from\r\n        imagesetContainer: null,\r\n\t\t// the object containing all the images elements. Usually they are retieved with a selector like '.imagelist a',\r\n        imageset: null,\r\n        firstImageRowHeight: 2,\r\n        initComplete: function () {\r\n        },\r\n        resizeStart: function () {\r\n        },\r\n        resizeComplete: function () {\r\n        }\r\n    };\r\n\tthis.images = [];\r\n\t// used to compare for width changes\r\n\tthis.eventgalleryPageWidth = 0;\r\n\t// the width of the container. This is kind of tricky since there can be many containers or just one.\r\n\tthis.width = null;\r\n    this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n    if (undefined !== newOptions) {\r\n        this.initialize();\r\n    }\r\n};\r\n\r\nEventgallery.Imagelist.prototype.initialize = function () {\r\n    var currentObject = this;\r\n    this.width = jQuery(this.options.imagesetContainer).width();\r\n\r\n    // save the current width so we don't react on an resize event if not necessary\r\n    this.eventgalleryPageWidth = this.width;\r\n\r\n    var images_tags = this.options.imageset;\r\n    this.images = [];\r\n\r\n    jQuery.each(images_tags, function (index, item) {\r\n        currentObject.images.push(new Eventgallery.Image(item, index));\r\n    });\r\n\r\n    window.addEventListener('resize', () => {\r\n        window.clearTimeout(this.eventgalleryTimer);\r\n\r\n        this.eventgalleryTimer = setTimeout(() => {\r\n            let new_width = jQuery(this.options.imagesetContainer).width();\r\n            this.width = new_width;\r\n            if (this.eventgalleryPageWidth !== new_width) {\r\n                this.options.resizeStart();\r\n                this.eventgalleryPageWidth = new_width;\r\n\r\n                jQuery(this.options.imagesetContainer).css('min-height', this.options.rowHeight*this.images.length);\r\n\r\n                this.processList();\r\n\r\n                jQuery(this.options.imagesetContainer).css('min-height','0px');\r\n\r\n                this.options.resizeComplete();\r\n            }\r\n        }, 500);\r\n\r\n    });\r\n\r\n\tjQuery(this.options.imagesetContainer).css('min-height', this.options.rowHeight*this.images.length);\r\n\r\n    this.processList();\r\n\r\n\tjQuery(this.options.imagesetContainer).css('min-height','0px');\r\n\r\n    //add a tiny timeout. This prevents some issue with lazyload\r\n\t//where images didn't load since the offset was wrong.\r\n    window.setTimeout(this.options.initComplete, 1);\r\n};\r\n\r\n/*calculated the with of an element*/\r\nEventgallery.Imagelist.prototype.getRowWidth = function () {\r\n    var rowWidth = this.width;\r\n\r\n    /* fix for the internet explorer if width if 45.666% == 699.87px*/\r\n    if (window.getComputedStyle) {\r\n        rowWidth = Math.floor(parseFloat(window.getComputedStyle(this.options.imagesetContainer).width) ) - 1;\r\n    } else {\r\n        rowWidth = rowWidth - 1;\r\n    }\r\n\r\n    return rowWidth;\r\n};\r\n\r\n/* processes the image list*/\r\nEventgallery.Imagelist.prototype.processList = function () {\r\n\r\n\tvar options;\r\n\r\n    /* find out how much space we have*/\r\n    var rowWidth = this.getRowWidth();\r\n\r\n\r\n    /* get a copy of the image list because we will pop the image during iteration*/\r\n    var imagesToProcess = this.images.slice(0);\r\n\r\n    if (imagesToProcess.length === 0) {\r\n        return;\r\n    }\r\n\r\n    /* display the first image larger */\r\n    if (this.options.firstImageRowHeight > 1) {\r\n        var image = imagesToProcess.shift();\r\n\r\n        /*if we have a large image, we have to hide it to get the real available space*/\r\n        image.tag.css('display', 'none');\r\n        rowWidth = this.getRowWidth();\r\n        image.tag.css('display', 'block');\r\n\r\n        var imageHeight = this.options.firstImageRowHeight * this.options.rowHeight;\r\n        var imageWidth = Math.floor(image.width / image.height * imageHeight);\r\n\r\n        if (imageWidth + this.options.minImageWidth >= rowWidth) {\r\n            imageWidth = rowWidth;\r\n        }\r\n\r\n        image.setSize(imageWidth, imageHeight);\r\n\r\n        let rowHeightForRightSideImages = this.options.rowHeight;\r\n\r\n        // in case the browser zooms to 110%, we need to make sure, the first image is smaller thand\r\n        // the images to the right. We do this by checking if there is a height difference between the\r\n        // height we want to get and the actual height. If there is one, we add a pixel to the rows\r\n        // on the right side.\r\n        if (imageHeight > image.getImageTagHeight()) {\r\n            rowHeightForRightSideImages = (imageHeight + 1) / this.options.firstImageRowHeight;\r\n        }\r\n\r\n        options = {\r\n            maxWidth: rowWidth - imageWidth,\r\n            maxHeight: rowHeightForRightSideImages,\r\n            adjustHeight: false\r\n        };\r\n\r\n        if (options.maxWidth > 0) {\r\n            this.generateRows(imagesToProcess, this.options.firstImageRowHeight, options, false);\r\n        }\r\n    }\r\n\r\n    options = {\r\n        maxWidth: rowWidth,\r\n        maxHeight: this.options.rowHeight,\r\n        heightJitter: this.options.rowHeightJitter,\r\n        doFillLastRow: this.options.doFillLastRow\r\n    };\r\n\r\n    this.generateRows(imagesToProcess, 99999, options, true);\r\n\r\n};\r\n\r\n    /**\r\n     * @param imagesToProcess\r\n     * @param numberOfRowsToCreate\r\n     * @param options\r\n     * @param finalRows\r\n     */\r\nEventgallery.Imagelist.prototype.generateRows = function (imagesToProcess, numberOfRowsToCreate, options, finalRows) {\r\n\tvar currentRow = new Eventgallery.Row(options);\r\n\r\n    while (imagesToProcess.length > 0 && numberOfRowsToCreate > 0) {\r\n        var addSuccessfull = currentRow.add(imagesToProcess[0]);\r\n        if (addSuccessfull) {\r\n            imagesToProcess.shift();\r\n        } else {\r\n            currentRow.processRow();\r\n            numberOfRowsToCreate--;\r\n            if (numberOfRowsToCreate === 0) break;\r\n            currentRow = new Eventgallery.Row(options);\r\n        }\r\n    }\r\n\r\n\tif (finalRows) {currentRow.isLastRow = true;}\r\n    currentRow.processRow();\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n","import PhotoSwipe from \"../../photoswipe/photoswipe\";\r\nimport PhotoSwipeUIDefault from \"../../photoswipe/photoswipe-ui-default\";\r\n\r\n(function(Eventgallery, jQuery){\r\n    /*\r\n     *    Constructor. Starts up the whole thing :-)\r\n     *\r\n     *    This script is free to use. It has been created by http://www.aplusmedia.de and\r\n     *    can be downloaded on http://www.esteak.net.\r\n     *    License: GNU GPL 2.0: http://creativecommons.org/licenses/GPL/2.0/\r\n     *    Example on: http://blog.aplusmedia.de/moo-gallery2\r\n     *    Known issues:\r\n     *    - preloading does not care about initialIndex param\r\n     *    - hovering to a control over the border of the big image will make the other one flickering\r\n     *    - if you enter and leave the control area very quickly, the control flickers sometimes\r\n     *    - does not work in IE6\r\n     *\r\n     *    @param {Array} thumbs, An array of HTML elements\r\n     *    @param {HTMLelement} bigImageContainer, the full size image\r\n     *    @param {HTMLelement} pageContainer, If you have several pages, put them in this container\r\n     *    @param {Object} options, You have to pass imagesPerPage if you have more than one!\r\n     */\r\n    Eventgallery.JSGallery2 = function(thumbs, bigImageContainer, pageContainer, newOptions) {\r\n\r\n        this.options = {\r\n            'prevHandle': null,\t\t\t//if you pass a previous page handle in here, it will be hidden if it's not needed\r\n            'nextHandle': null,\t\t\t//like above, but for next page\r\n            'countHandle': null,\t\t//handle of the counter variable\r\n            'titleTarget': null,\t\t//target HTML element where image texts are copied into\r\n            'initialIndex': -1,\t\t\t//which thumb to select after init. you could create deep links with it.\r\n            'maxOpacity': 0.8,\t\t\t//maximum opacity before cursor reaches prev/next control, then it will be set to 1 instantly.\r\n            'showSocialMediaButton': true,\r\n            'showCartButton': true,\r\n            'showCartConnector': false,\r\n            'cartConnectorLinkRel': '',\r\n            'activeClass': 'thumbnail-active', // the css class for the active thumbnail\r\n            'lightboxRel': 'lightbo2', // the trigger rel for the lightbox script\r\n            'touchContainerSelector' : '#bigimageContainer'\r\n        };\r\n\r\n        this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n\r\n        var pages = jQuery(pageContainer).children('div');\r\n\r\n\t\t// defines if thumbs are currently running\r\n\t\tthis.running = false;\r\n        this.currentPageNumber = 0;\r\n\r\n        this.blockKeys = false;\r\n        this.imagesPerFirstPage = jQuery(pages[0]).find('div.ajax-thumbnail-container').length;\r\n        this.imagesPerPage = this.imagesPerFirstPage;\r\n\r\n        if (pages.length>1 && jQuery(pages[1]).find('div.ajax-thumbnail-container').length>0)  {\r\n            this.imagesPerPage = jQuery(pages[1]).find('div.ajax-thumbnail-container').length;\r\n        }\r\n\r\n        this.thumbs = thumbs;\r\n\r\n        this.bigImage = jQuery(bigImageContainer);\r\n        this.pageContainer = jQuery(pageContainer);\r\n        this.convertThumbs();\r\n\r\n        this.lastPage = Math.ceil((this.thumbs.length - this.imagesPerFirstPage) / this.imagesPerPage) + 1;\r\n\r\n        var url = document.location.href;\r\n        this.initialIndex = parseInt(Eventgallery.Tools.getUrlHashParameterValue(url, 'imageno'));\r\n        if (isNaN(this.initialIndex)) {\r\n            this.initialIndex = 0;\r\n        }\r\n\r\n\r\n        this.createControls();\r\n\r\n        this.createGallerySlides();\r\n\r\n        this.gotoPage(0);\r\n\r\n        if (this.options.initialIndex !== -1) {\r\n            this.unBlockKeys();\r\n            this.selectByIndex(this.options.initialIndex);\r\n        } else if (this.initialIndex !== 0) {\r\n\r\n            this.unBlockKeys();\r\n            this.selectByIndex(this.initialIndex);\r\n        }\r\n\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.createGallerySlides = function() {\r\n        this.slides = [];\r\n        jQuery.each(this.thumbs, (count, thumbContainer) => {\r\n            let lightboxLinkElement = thumbContainer.getElementsByTagName('A')[0];\r\n\r\n            let newSrc = lightboxLinkElement.getAttribute('rel');\r\n            let title =  decodeURIComponent(lightboxLinkElement.getAttribute('data-description'));\r\n            let slide =    {\r\n                w: lightboxLinkElement.getAttribute('data-width'),\r\n                h: lightboxLinkElement.getAttribute('data-height'),\r\n                src: lightboxLinkElement.getAttribute('href'),\r\n                title: title\r\n            };\r\n            this.slides.push(slide)\r\n        });\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.createControls = function () {\r\n        this.prevLink = jQuery('<a href=\"#\" class=\"link jsgallery-prev\"></a>');\r\n        this.prevLink.bind('click', jQuery.proxy(this.prevImage, this));\r\n        this.prevLink.mouseleave(jQuery.proxy(this.mouseLeaveHandler, this));\r\n\r\n        this.prevLink.mouseover( jQuery.proxy( function (e) {\r\n            this.focusControl(e, this.prevLink);\r\n        }, this));\r\n\r\n        this.zoomLink = jQuery('<a href=\"#\" class=\"link jsgallery-zoom\"></a>');\r\n        this.zoomLink.mouseleave(jQuery.proxy(this.mouseLeaveHandler, this));\r\n\r\n        this.zoomLink.mouseover( jQuery.proxy(function (e) {\r\n            this.focusControl(e, this.zoomLink);\r\n        }, this));\r\n\r\n        this.nextLink = jQuery('<a href=\"#\" class=\"link jsgallery-next\"></a>');\r\n        this.nextLink.bind('click', jQuery.proxy(this.nextImage, this));\r\n        this.nextLink.mouseleave(jQuery.proxy(this.mouseLeaveHandler, this));\r\n\r\n        this.nextLink.mouseover(jQuery.proxy(function (e) {\r\n            this.focusControl(e, this.nextLink);\r\n        }, this));\r\n\r\n\t\tthis.bigImage.parent().append(this.prevLink);\r\n        this.bigImage.parent().append(this.zoomLink);\r\n        this.bigImage.parent().append(this.nextLink);\r\n\r\n        this.bigImage.on('load', ()=>this.showBigImage());\r\n\r\n        if (this.options.showCartButton) {\r\n            this.add2cartLink = jQuery('<a href=\"#\" class=\"eventgallery-add2cart eventgallery-openAdd2cart jsgallery-add2cart\"><i class=\"egfa egfa-2x egfa-cart-plus\"></i></a>');\r\n            this.bigImage.parent().append(this.add2cartLink);\r\n            jQuery('body').trigger('updatecartlinks');\r\n        }\r\n\r\n        if (this.options.showCartConnector) {\r\n\r\n            this.cartConnectorLink = jQuery('<a href=\"#\" id=\"ajax-cartconnector\" class=\"button-cart-connector jsgallery-cartconnector\"><i class=\"egfa egfa-2x egfa-cart-plus\"></i></a>');\r\n            this.cartConnectorLink.attr('rel', this.options.cartConnectorLinkRel);\r\n            this.bigImage.parent().append(this.cartConnectorLink);\r\n        }\r\n\r\n        if (this.options.showSocialMediaButton) {\r\n            this.socialmediabutton = jQuery('<a id=\"ajax-social-media-button\" class=\"social-share-button social-share-button-open jsgallery-socialmedia\" rel=\"nofollow\" href=\"#\"><i class=\"egfa egfa-2x egfa-share-alt-square\"></i></a>');\r\n            this.socialmediabutton.click((e)=>Eventgallery.SocialShareButton.openShareDialog(e));\r\n            this.bigImage.parent().append(this.socialmediabutton);\r\n        }\r\n\r\n        jQuery(document).keydown(jQuery.proxy(this.keyboardHandler, this));\r\n\r\n\r\n\t\tvar options = {\r\n\t\t  dragLockToAxis: true,\r\n\t\t  dragBlockHorizontal: true,\r\n\t\t  swipeVelocityX: 0.2\r\n\t\t};\r\n\r\n\r\n\r\n\r\n\t\tvar swipeleft =  jQuery.proxy(function(e) {\r\n\t\t    this.nextImage(e);\r\n\t\t}, this);\r\n\r\n\t\tvar swiperight = jQuery.proxy(function(e) {\r\n\t\t    this.prevImage(e);\r\n\t\t}, this);\r\n\r\n        var tabaction = function(e) {\r\n            event.target.click();\r\n        };\r\n\r\n        Eventgallery.Touch.addTouch(this.options.touchContainerSelector,\r\n            swiperight,\r\n            swipeleft,\r\n            tabaction,\r\n            true\r\n        );\r\n\r\n        this.mouseLeaveHandler();\r\n    };\r\n\r\n    /**\r\n     * Focuses one control\r\n     *\r\n     * @param {Event} event\r\n     * @param {HTMLElement} control\r\n    */\r\n    Eventgallery.JSGallery2.prototype.focusControl = function (event, control) {\r\n        control.css('opacity', 1);\r\n    };\r\n\r\n    /**\r\n     * Hides the controls.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.mouseLeaveHandler = function () {\r\n        jQuery(this.nextLink).css('opacity', 0);\r\n        jQuery(this.prevLink).css('opacity', 0);\r\n        jQuery(this.zoomLink).css('opacity', 0);\r\n    };\r\n\r\n    /**\r\n     * Handles keyboard interactions.\r\n     * @param {Event} event\r\n     */\r\n    Eventgallery.JSGallery2.prototype.keyboardHandler = function (event) {\r\n\r\n\r\n        if (!this.blockKeys && Eventgallery.lightbox.isOpen() !== true) {\r\n            if (event.keyCode >= 49 && event.keyCode <= 57) {\r\n                this.gotoPage(event.key - 1);\r\n            } else if (event.keyCode == 37) {\r\n                this.prevImage(event);\r\n            } else if (event.keyCode == 39) {\r\n                this.nextImage(event);\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     *    Returns the distance to the mouse from the middle of a given element.\r\n     *    @param {HTMLelement} element\r\n     *    @param {Event} event\r\n     *    @return integer\r\n     */\r\n    Eventgallery.JSGallery2.prototype.getDistanceToMouse = function (element, event) {\r\n        var s = jQuery(element);\r\n        var xDiff = Math.abs(event.clientX - (s.position().left + s.width() / 2));\r\n        var yDiff = Math.abs(event.clientY - (s.position().top + s.height() / 2));\r\n        return Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.resetThumbs = function () {\r\n       \tthis.running = false;\r\n\r\n\t\tthis.convertThumbs();\r\n\r\n        //if we like to select another image on that page than the first one\r\n        this.select(this.selectedContainer, true);\r\n    };\r\n\r\n    /**\r\n     *    Adds the border to the thumbs and so on. (conversion of static thumbs)\r\n     */\r\n    Eventgallery.JSGallery2.prototype.convertThumbs = function () {\r\n        var currentObject = this;\r\n        jQuery.each(this.thumbs, function (count, thumbContainer) {\r\n            currentObject.convertThumb(thumbContainer, count);\r\n        });\r\n    };\r\n\r\n    /**\r\n     * Converts one single thumb.\r\n     * @param {HTMLelement} thumbContainer\r\n     * @param {Integer} count\r\n     */\r\n    Eventgallery.JSGallery2.prototype.convertThumb = function (thumbContainer, count) {\r\n\r\n        if (thumbContainer === undefined) {\r\n            return;\r\n        }\r\n\r\n        var container = jQuery(thumbContainer);\r\n\r\n        container.click(jQuery.proxy(function(e) {\r\n            e.preventDefault();\r\n            this.select(container);\r\n        }, this));\r\n\r\n\r\n        container.css('position', 'relative');\r\n        container.attr('data-counter', count);\r\n        container.attr('href', '#');\r\n    };\r\n\r\n    /**\r\n     *    Removes key blocking.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.unBlockKeys = function () {\r\n        this.blockKeys = false;\r\n    };\r\n\r\n    /**\r\n     *    Selects a certain image. (You have to pass the outer container of the image)\r\n     *    @param container\r\n     *    @param forceReload\r\n     */\r\n    Eventgallery.JSGallery2.prototype.select = function (container, forceReload) {\r\n        forceReload = typeof forceReload !== 'undefined' ? forceReload : false;\r\n\r\n        if (this.blockKeys || container === null) {\r\n            return false;\r\n        }\r\n\r\n\r\n        this.blockKeys = true;\r\n        if ( this.selectedContainer !== undefined ) {\r\n            //this prevents an ugly effect if you click on the currently selected item\r\n            if (container == this.selectedContainer && !forceReload) {\r\n                this.unBlockKeys();\r\n                return false;\r\n            }\r\n            this.deselect(this.selectedContainer);\r\n        }\r\n\r\n        // handle URL\r\n        if (history && history.pushState) {\r\n            history.pushState('', '', Eventgallery.Tools.addUrlHashParameter(window.location.href, 'imageno', this.thumbs.index(container)));\r\n        }\r\n\r\n        //if target image is not on current page, we have to go there first\r\n        var targetPage = Math.floor((jQuery(container).data('counter') - this.imagesPerFirstPage) / this.imagesPerPage) + 1;\r\n\r\n        if (this.currentPageNumber != targetPage) {\r\n            this.gotoPage(targetPage, container);\r\n        }\r\n        this.selectedContainer = container;\r\n\r\n        jQuery(container).addClass(this.options.activeClass);\r\n\r\n        //first link in the container\r\n        var source = jQuery(container).children().first();\r\n\r\n\r\n        // prepare the add2cart button\r\n        if (this.options.showCartButton) {\r\n            this.add2cartLink.attr('data-id', source.attr('data-id'));\r\n            //jQuery('.eventgallery-add2cart').attr('data-id', source.data('id'));\r\n        }\r\n\r\n        if (this.options.showCartConnector) {\r\n            this.cartConnectorLink.attr('data-folder', source.data('folder'));\r\n            this.cartConnectorLink.attr('data-file', source.data('file'));\r\n            this.cartConnectorLink.attr('href', decodeURIComponent(source.data('cart-connector-link')));\r\n        }\r\n\r\n        if (this.options.showSocialMediaButton) {\r\n            this.socialmediabutton.attr('data-link', decodeURIComponent(source.data('social-sharing-link')) );\r\n        }\r\n\r\n        jQuery(document).trigger('updatecartlinks');\r\n\r\n        // now lets set the image\r\n        this.setImage(source);\r\n    };\r\n\r\n\r\n    /**\r\n     * Selects an image by its thumbnail index.\r\n     * @param {integer} index of the thumbnail, starting with 0\r\n     */\r\n    Eventgallery.JSGallery2.prototype.selectByIndex = function (index) {\r\n        //this.mouseLeaveHandler();\r\n        if (index < 0 || this.thumbs.length <= index) {\r\n            index = 0;\r\n        }\r\n        this.select(this.thumbs[index]);\r\n    };\r\n\r\n    /**\r\n     *    Opposite to method above.\r\n     *    @param {HTMLelement} container\r\n     */\r\n    Eventgallery.JSGallery2.prototype.deselect = function (container) {\r\n        jQuery(container).removeClass(this.options.activeClass);\r\n    };\r\n\r\n    /**\r\n     *    Changes the full size image to given one.\r\n     *    @param lightboxLinkElement\r\n     */\r\n    Eventgallery.JSGallery2.prototype.setImage = function (lightboxLinkElement) {\r\n\r\n            this.bigImage.css('opacity', '0.1');\r\n            let newSrc = lightboxLinkElement.attr('rel');\r\n            let title =  decodeURIComponent(lightboxLinkElement.attr('data-description'));\r\n\r\n            this.zoomLink.unbind('click');\r\n\r\n            let currentIndex = this.thumbs.index(this.selectedContainer);\r\n\r\n            this.zoomLink.click((e) => {\r\n                this.createGallerySlides();\r\n\r\n                Eventgallery.lightbox.openPhotoSwipe(\r\n                    currentIndex, this.slides, true, false\r\n                );\r\n                Eventgallery.lightbox.setAfterChangeEventListener(() => {\r\n                    let gid = Eventgallery.lightbox.getCurrentSlide().gid;\r\n                    if (this.slides.length>0 && gid === this.slides[0].gid) {\r\n                        this.selectByIndex(Eventgallery.lightbox.getCurrentIndex());\r\n                    }\r\n                });\r\n            });\r\n            if (Eventgallery.lightbox.isOpen() === true) {\r\n               Eventgallery.lightbox.gotoSlide(currentIndex);\r\n            }\r\n\r\n            jQuery(this.options.titleTarget).html(title);\r\n\r\n            this.bigImage.attr('src', newSrc);\r\n            this.unBlockKeys();\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.showBigImage= function() {\r\n        this.bigImage.css('opacity', '1');\r\n    };\r\n\r\n    /**\r\n     *    Navigates to previous page.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.prevPage = function () {\r\n        this.gotoPage(this.currentPageNumber - 1);\r\n    };\r\n    /**\r\n     *    Navigates to next page.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.nextPage = function () {\r\n        this.gotoPage(this.currentPageNumber + 1);\r\n    };\r\n    /**\r\n     *    Selects the previous image.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.prevImage = function (e) {\r\n        if (e !== undefined) {\r\n            e.preventDefault();\r\n        }\r\n        this.selectByIndex(this.thumbs.index(this.selectedContainer) - 1);\r\n    };\r\n    /**\r\n     *    Selects the next image.\r\n     */\r\n    Eventgallery.JSGallery2.prototype.nextImage = function (e) {\r\n        if (e !== undefined) {\r\n            e.preventDefault();\r\n        }\r\n        this.selectByIndex(this.thumbs.index(this.selectedContainer) + 1);\r\n    };\r\n\r\n    /**\r\n     * Zooms an image\r\n     */\r\n    Eventgallery.JSGallery2.prototype.zoomImage = function (e) {\r\n        if (e !== undefined) {\r\n            e.preventDefault();\r\n        }\r\n    };\r\n\r\n    /**\r\n     *    Navigates to given page and selects the first image of it.\r\n     *    Also hides the handles (if set).\r\n     *    @param {Integer} pageNumber, index of the target page (0-n)\r\n     *  @param {HTMLElement} selectImage, optionally receives a particular image to select\r\n     */\r\n    Eventgallery.JSGallery2.prototype.gotoPage = function (pageNumber, selectImage) {\r\n        //if we like to select another image on that page than the first one\r\n        if (pageNumber === 0) {\r\n            selectImage = selectImage === undefined ? this.thumbs[0] : selectImage;\r\n        } else {\r\n            let i = (pageNumber - 1) * this.imagesPerPage + this.imagesPerFirstPage;\r\n            selectImage = this.thumbs[i] === undefined ? selectImage : this.thumbs[i];\r\n        }\r\n\r\n        if (pageNumber >= 0 && pageNumber < this.lastPage) {\r\n\r\n            this.pageContainer.css('margin-left',\r\n            this.pageContainer.children().width() * pageNumber * -1);\r\n\r\n            // fix height of the page-container\r\n            var maxHeight = 0;\r\n            this.pageContainer.children().each(function (index, page) {\r\n                var height = jQuery(page).height();\r\n                if (height > maxHeight) {\r\n                    maxHeight = height;\r\n                }\r\n            });\r\n\r\n            this.pageContainer.css('height', maxHeight);\r\n\r\n            this.currentPageNumber = pageNumber;\r\n            this.select(selectImage);\r\n            this.updateHandles();\r\n\r\n        }\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.updateHandles = function () {\r\n        //update handles\r\n        var dummy;\r\n\r\n        if (this.options.prevHandle !== undefined) {\r\n            dummy = this.currentPageNumber === 0 ? this.options.prevHandle.fadeOut():this.options.prevHandle.fadeIn();\r\n        }\r\n        if (this.options.nextHandle !== undefined) {\r\n            dummy = this.currentPageNumber == this.lastPage - 1 ? this.options.nextHandle.fadeOut():this.options.nextHandle.fadeIn();\r\n        }\r\n\r\n        if (this.options.countHandle !== undefined) {\r\n            dummy = this.updatePagingBar(this.options.countHandle, this.currentPageNumber, this.lastPage);\r\n        }\r\n\r\n    };\r\n\r\n    Eventgallery.JSGallery2.prototype.updatePagingBar = function (countHandle, currentPage, pageCount) {\r\n\t\tvar i;\r\n\r\n        //init the pagingbar\r\n        if (pageCount > 1 && countHandle.html() === '') {\r\n\r\n            for (i = 0; i < pageCount; i++) {\r\n                this.createCountLink(this, countHandle, i);\r\n            }\r\n        }\r\n\r\n        var pageSpeed = this.options.pageSpeed;\r\n\r\n\r\n        if (pageCount > 9) {\r\n\r\n            for (i = 0; i < pageCount; i++) {\r\n                jQuery('#count' + i).css('display', 'inline');\r\n            }\r\n\r\n            var skipFromRight = pageCount;\r\n            var skipFromLeft = 0;\r\n\r\n            var spaceToRight = pageCount - currentPage - 1;\r\n            var spaceToLeft = currentPage;\r\n\r\n            if (spaceToLeft > 4 && spaceToRight > 4) {\r\n                skipFromLeft = currentPage - 4;\r\n                skipFromRight = currentPage + 5;\r\n            } else {\r\n                if (spaceToLeft <= 4) {\r\n                    skipFromLeft = 0;\r\n                    skipFromRight = currentPage + 5 + (4 - spaceToLeft);\r\n                }\r\n                if (spaceToRight <= 4) {\r\n                    skipFromLeft = currentPage - 4 - (4 - spaceToRight);\r\n                    skipFromRight = pageCount;\r\n                }\r\n            }\r\n\r\n            for (i = 0; i < skipFromLeft; i++) {\r\n                jQuery('#count' + i).css('display', 'none');\r\n            }\r\n\r\n            for (i = skipFromRight; i < pageCount; i++) {\r\n                jQuery('#count' + i).css('display', 'none');\r\n\r\n            }\r\n        }\r\n\r\n        jQuery(countHandle).children('.active').removeClass('active');\r\n        jQuery('#count' + currentPage).addClass('active');\r\n\r\n    };\r\n\r\n\r\n    Eventgallery.JSGallery2.prototype.createCountLink = function (gallery, countHandle, currentPageNumber) {\r\n\r\n        var myAnchor = jQuery('<a class=\"page-link\" href=\"#\">' + (currentPageNumber + 1) + '</a>');\r\n\r\n\r\n        myAnchor.click(jQuery.proxy(function (e) {\r\n            this.gotoPage(currentPageNumber);\r\n            return false;\r\n        }, gallery));\r\n\r\n\r\n        var myListItem = jQuery('<li class=\"count page-item\" id=\"count' + currentPageNumber + '\"></li>');\r\n\r\n        myListItem.append(myAnchor);\r\n\r\n        countHandle.append(myListItem);\r\n\r\n    };\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n","export default class EventgalleryLazyload {\r\n\r\n    static instance = null;\r\n    static knownImageUrls = [];\r\n\r\n    constructor() {\r\n        this.options = {\r\n            elementSelector: 'img.eventgallery-lazyme',\r\n            classForLoaded: 'eventgallery-lazyload-loaded',\r\n            classForLoading: 'eventgallery-lazyload-loading'\r\n        }\r\n\r\n        if ('IntersectionObserver' in window &&\r\n            'IntersectionObserverEntry' in window &&\r\n            'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\r\n\r\n            // Minimal polyfill for Edge 15's lack of `isIntersecting`\r\n            // See: https://github.com/w3c/IntersectionObserver/issues/211\r\n            if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\r\n                Object.defineProperty(window.IntersectionObserverEntry.prototype,\r\n                    'isIntersecting', {\r\n                        get: function () {\r\n                            return this.intersectionRatio > 0;\r\n                        }\r\n                    });\r\n            }\r\n\r\n\r\n            this.imageObserver = new IntersectionObserver((entries, imgObserver) => {\r\n                entries.forEach((entry) => {\r\n                    if (entry.isIntersecting) {\r\n                        const lazyImage = entry.target;\r\n                        if (lazyImage.dataset.src) {\r\n\r\n                            lazyImage.style.backgroundImage = EventgalleryLazyload.createBackgroundImageUrl(lazyImage.dataset.src);\r\n\r\n                            if (!EventgalleryLazyload.knownImageUrls.includes(lazyImage.dataset.src)) {\r\n                                EventgalleryLazyload.knownImageUrls.push(lazyImage.dataset.src);\r\n                                lazyImage.classList.add('eventgallery-lazyload-loading');\r\n                                lazyImage.classList.remove('eventgallery-lazyload-loaded');\r\n\r\n                                let img = document.createElement('img');\r\n                                img.src = lazyImage.dataset.src;\r\n                                img.onload = () => {\r\n                                    lazyImage.classList.remove('eventgallery-lazyload-loading');\r\n                                    lazyImage.classList.add('eventgallery-lazyload-loaded');\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                })\r\n            });\r\n        }\r\n    }\r\n\r\n    static createBackgroundImageUrl(backgroundImageUrl) {\r\n        return 'url(\"' + backgroundImageUrl + '\")';\r\n    }\r\n\r\n    static watchImages() {\r\n\r\n        if (!EventgalleryLazyload.instance) {\r\n            EventgalleryLazyload.instance = new EventgalleryLazyload();\r\n        } else {\r\n            return;\r\n        }\r\n\r\n        let lazyImages = document.querySelectorAll(EventgalleryLazyload.instance.options.elementSelector);\r\n\r\n        for (let i = 0; i < lazyImages.length; i++) {\r\n            let lazyImage = lazyImages[i];\r\n\r\n            if (lazyImage.dataset.src) {\r\n                if (EventgalleryLazyload.instance.imageObserver) {\r\n                    EventgalleryLazyload.instance.imageObserver.observe(lazyImage);\r\n                } else {\r\n                    lazyImage.style.backgroundImage = EventgalleryLazyload.createBackgroundImageUrl(lazyImage.dataset.src);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","(function(Eventgallery, jQuery){\r\n\t\r\n/* processes a row is a image list */\r\nEventgallery.Row = function(newOptions) {\r\n\r\n\tthis.options = {\r\n        maxWidth: 960,\r\n        maxHeight: 250,\r\n        heightJitter: 0,\r\n        adjustHeight: true,\r\n        doFillLastRow: true\r\n    };\r\n    this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n    this.isLastRow = false;\r\n    this.images = [];\r\n    this.width = 0;\r\n    if (this.options.heightJitter > 0) {\r\n        this.options.maxHeight = Math.floor(this.options.maxHeight + (Math.random() * 2 * this.options.heightJitter) - this.options.heightJitter);\r\n    }\r\n};\r\n\r\nEventgallery.Row.prototype.add = function (eventgalleryImage) {\r\n    let imageWidth =eventgalleryImage.width / eventgalleryImage.height * this.options.maxHeight;\r\n\r\n    // determine the number of images per line. return false if the row if full.\r\n\r\n    let addThisImage = this.width + imageWidth <= this.options.maxWidth || this.images.length === 0;\r\n\r\n    if (!addThisImage) {\r\n        let gap = Math.abs(this.options.maxWidth - this.width - imageWidth) / this.options.maxWidth;\r\n        if (gap<0.2) {\r\n            addThisImage = true;\r\n        }\r\n    }\r\n\r\n    // determine the number of images per line. return false if the row if full.\r\n    if (addThisImage) {\r\n        this.images.push(eventgalleryImage);\r\n        eventgalleryImage.calculatedWidth = imageWidth;\r\n        this.width = this.width + imageWidth;\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n};\r\n\r\nEventgallery.Row.prototype.processRow = function () {\r\n    let gap, rowHeight, i;\r\n\r\n    gap = this.options.maxWidth - this.width;\r\n\r\n    // if there is no gap to fill, we need to resize the last row to fit the image.\r\n    if (this.isLastRow && this.options.doFillLastRow === false && gap >=0 ) {\r\n        if (gap>=0) {\r\n            gap = 0;\r\n        }\r\n        rowHeight = this.options.maxHeight;\r\n    } else {\r\n\r\n        rowHeight = this.options.maxHeight / (this.width/this.options.maxWidth);\r\n    }\r\n\r\n    if (this.options.adjustHeight === false) {\r\n        rowHeight = this.options.maxHeight;\r\n    }\r\n\r\n    for (i=0; i < this.images.length; i++) {\r\n        var image = this.images[i];\r\n\r\n        var calculatedWidth = image.calculatedWidth;\r\n\r\n        // how much of the gap does this element need to fill?\r\n        var gapToClose = (calculatedWidth / this.width ) * gap;\r\n\r\n        image.setSize(calculatedWidth + gapToClose, rowHeight);\r\n    }\r\n\r\n\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);","(function(Eventgallery){\r\n/* determines the size of an image so a image server can deliver it. */\r\n\r\nEventgallery.SizeCalculator = function(newOptions) {\r\n\tthis.options = {\r\n        // to be able to handle internal and google picasa images, we need to restrict the availabe image sizes.\r\n        availableSizes: [48, 104, 160, 288, 320, 400, 512, 640, 720, 800, 1024, 1280, 1440],\r\n        flickrSizes:   {100 : 't', 240 : 'm', 320 : 'n', 500 : '-', 640 : 'z', 800 : 'c', 1024 : 'b', 1600 : 'h', 2048 : 'k'}\r\n\r\n};\r\n    this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);   \r\n};\r\n\r\nEventgallery.SizeCalculator.prototype.adjustImageURL = function (url, size) {\r\n    url = url.replace(/=w(\\d+)/, '=w' + size);\r\n    url = url.replace(/width=(\\d+)/, 'width=' + size);\r\n    url = url.replace(/\\/s(\\d*)\\//, '/s' + size + '/');\r\n    url = url.replace(/\\/s(\\d*)-c\\//, '/s' + size + '-c/');\r\n    url = url.replace(/\\/nocrop_(\\d+)_/, '/nocrop_' + size + '_');\r\n\r\n    return url;\r\n};\r\n\r\n\r\nEventgallery.SizeCalculator.prototype.getFlickrURL = function(farm, server, secret,  secret_h, secret_k, secret_o, id, width, height, originalwidth, originalheight) {\r\n    var longSideSize,\r\n        originalLongSideSize,\r\n        sizeCode,\r\n        secretString,\r\n        sizeString,\r\n        ratio;\r\n\r\n    let minSizes = this.getMinSizes(width, height, originalwidth, originalheight);\r\n\r\n\r\n    if (originalwidth > originalheight) {\r\n        longSideSize = minSizes.width;\r\n        originalLongSideSize = originalwidth;\r\n    } else {\r\n        longSideSize = minSizes.height;\r\n        originalLongSideSize = originalheight;\r\n    }\r\n\r\n    if (originalLongSideSize < longSideSize) {\r\n        sizeCode = 'o';\r\n    } else {\r\n\r\n        for (var size in this.options.flickrSizes) {\r\n            if (size > longSideSize) {\r\n                sizeCode = this.options.flickrSizes[size];\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (sizeCode === 'h' && secret_h === '') {\r\n        sizeCode = 'o'\r\n    }\r\n\r\n    if (sizeCode === 'k' && secret_k === '') {\r\n        sizeCode = 'o'\r\n    }\r\n\r\n    switch (sizeCode) {\r\n        case \"o\":\r\n            secretString = secret_o;\r\n            break;\r\n        case \"h\":\r\n            secretString = secret_h;\r\n            break;\r\n        case \"k\":\r\n            secretString = secret_k;\r\n            break;\r\n        default:\r\n            secretString = secret;\r\n    }\r\n\r\n    sizeString = sizeCode == '-' ? '' : '_' + sizeCode;\r\n    return 'https://farm' + farm + '.staticflickr.com/' + server + '/' + id + '_' + secretString + sizeString + '.jpg';\r\n};\r\n\r\nEventgallery.SizeCalculator.prototype.getSize = function (width, height, ratio) {\r\n\t\r\n    var googleWidth = this.options.availableSizes[0];\r\n\t\r\n\tfor(var index=0; index < this.options.availableSizes.length; index++) {\r\n\t\tvar item = \tthis.options.availableSizes[index];\r\n    \tvar widthOkay;\r\n        var heightOkay;\r\n        \r\n        if (googleWidth > this.options.availableSizes[0]){\r\n        \tbreak;\r\n        }\r\n        \r\n        var lastItem = index == this.options.availableSizes.length - 1;\r\n\r\n        if (ratio >= 1) {\r\n            widthOkay = item > width;\r\n            heightOkay = item / ratio > height;\r\n\r\n            if ((widthOkay && heightOkay) || lastItem) {\r\n                googleWidth = item;\r\n            }\r\n        } else {\r\n            heightOkay = item > height;\r\n            widthOkay = item * ratio > width;\r\n\r\n            if ((widthOkay && heightOkay) || lastItem) {\r\n                googleWidth = item;\r\n            }\r\n        }\r\n    }\r\n\t\r\n    return googleWidth;\r\n};\r\n\r\n    /**\r\n     * returns the minimum values for height and width to fill the given box size.\r\n     * @param boxWidth\r\n     * @param boxHeight\r\n     * @param originalWidth\r\n     * @param originalHeight\r\n     */\r\n    Eventgallery.SizeCalculator.prototype.getMinSizes = function (boxWidth, boxHeight, originalWidth, originalHeight) {\r\n\r\n\r\n          let ratio = originalWidth / originalHeight;\r\n\r\n          let height, width;\r\n\r\n          if (originalWidth > originalHeight) {\r\n              if (boxWidth > boxHeight) {\r\n                  width = boxWidth;\r\n                  height = boxWidth / ratio;\r\n                  if (height < boxHeight) {\r\n                      height = boxHeight;\r\n                      width = boxHeight * ratio;\r\n                  }\r\n              } else {\r\n                  height = boxHeight;\r\n                  width = boxHeight * ratio;\r\n                  if (width < boxWidth) {\r\n                      width = boxWidth;\r\n                      height = boxHeight * ratio;\r\n                  }\r\n              }\r\n          } else {\r\n              if (boxWidth > boxHeight) {\r\n                  width = boxWidth;\r\n                  height = boxWidth / ratio;\r\n                  if (height < boxHeight) {\r\n                      height = boxHeight;\r\n                      width = boxHeight * ratio;\r\n                  }\r\n              } else {\r\n                  height = boxHeight;\r\n                  width = boxHeight * ratio;\r\n                  if (width < boxWidth) {\r\n                      width = boxWidth;\r\n                      height = boxWidth / ratio;\r\n                  }\r\n              }\r\n          }\r\n\r\n          return {width: Math.ceil(width), height: Math.ceil(height)};\r\n    };\r\n\r\n})(Eventgallery);   ","(function(Eventgallery, jQuery){\r\n\r\n\tEventgallery.DownloadButton = class {\r\n\t\tstatic download(e, href, download) {\r\n\t\t\te.preventDefault();\r\n\t\t\tlet a = document.createElement('a');\r\n\t\t\ta.href = href;\r\n\t\t\ta.download = download;\r\n\t\t\tdocument.body.appendChild(a);\r\n\t\t\ta.click();\r\n\t\t\tdocument.body.removeChild(a)\r\n\t\t}\r\n\t};\r\n\r\n\tEventgallery.ClickableButton = class {\r\n\t\tstatic click(e, href) {\r\n\t\t\te.preventDefault();\r\n\t\t\tdocument.location.href = href;\r\n\t\t}\r\n\t};\r\n\r\n\tEventgallery.SocialShareButton = class {\r\n\t\tstatic openShareDialog(e) {\r\n\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\r\n\t\t\tvar link = jQuery(e.target);\r\n\t\t\tif (!link.attr('data-link')) {\r\n\t\t\t\tlink = link.parent('[data-link]');\r\n\t\t\t}\r\n\r\n\t\t\tvar id = 'id_' + Math.ceil(Math.random()*10000000);\r\n\r\n\t\t\tvar targetPos = link.offset();\r\n\t\t\tvar myDiv = jQuery('<div><i class=\"egfa egfa-2x egfa-cog egfa-spin\"></i></div>');\r\n\t\t\tmyDiv.attr('id', id);\r\n\t\t\tmyDiv.addClass('social-sharing-toolbox');\r\n\r\n\t\t\tmyDiv.css( {\r\n\t\t\t\t'opacity': '1 !important',\r\n\t\t\t\t'position': 'absolute',\r\n\t\t\t\t'top': targetPos.top-10,\r\n\t\t\t\t'left': targetPos.left-10\r\n\t\t\t});\r\n\r\n\t\t\tjQuery('body').append(myDiv);\r\n\r\n\t\t\tmyDiv.fadeIn();\r\n\r\n\t\t\tmyDiv.load(link.attr('data-link'));\r\n\r\n\t\t\tvar timer = null;\r\n\r\n\t\t\tvar closeFunction = function(){\r\n\t\t\t\tmyDiv.fadeOut(300, function() {\r\n\t\t\t\t\tjQuery(this).remove();\r\n\t\t\t\t});\r\n\t\t\t\tjQuery(document).off('touchend click', closeFunction2);\r\n\t\t\t};\r\n\r\n\t\t\tmyDiv.mouseleave( function(){\r\n\t\t\t\ttimer = window.setTimeout(closeFunction, 1000);\r\n\t\t\t});\r\n\r\n\t\t\tmyDiv.mouseenter( function() {\r\n\t\t\t\twindow.clearTimeout(timer);\r\n\t\t\t});\r\n\r\n\t\t\t// this method is used to close the sharing windows if we click somewhere else.\r\n\t\t\tvar closeFunction2 = function(e) {\r\n\t\t\t\tif (e.target.id != id && jQuery(e.target).parents('#' + id).length === 0) {\r\n\t\t\t\t\tcloseFunction();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tjQuery(document).on('touchend click', closeFunction2);\r\n\r\n\t\t}\r\n\t};\r\n\r\n\tjQuery( document ).ready(function() {\r\n\r\n\r\n\t\tjQuery(document).on('touchend click', '.social-share-button-close', function(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar myDivs = jQuery(e.target).parents('.social-sharing-toolbox');\r\n\t\t\tmyDivs.fadeOut(300, function() {\r\n\t\t\t\tjQuery(this).remove();\r\n\t\t\t});\r\n\t\t});\r\n\r\n\r\n        let elements = document.querySelectorAll('.social-share-button-open');\r\n        for (let i=0; i<elements.length;i++) {\r\n            elements[i].addEventListener(\"click\", (e) => {\r\n\t\t\t\tEventgallery.SocialShareButton.openShareDialog(e);\r\n            }, true);\r\n        }\r\n\r\n\r\n\t\telements = document.querySelectorAll('.eg-download');\r\n\t\tfor (let i=0; i<elements.length;i++) {\r\n\t\t\tlet element = elements[i];\r\n\t\t\tlet href = element.getAttribute('data-href');\r\n\t\t\tlet download = element.getAttribute('data-download');\r\n\r\n\t\t\tif (download != null) {\r\n\t\t\t\telement.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\tEventgallery.DownloadButton.download(e, href, download);\r\n\t\t\t\t}, true);\r\n\t\t\t} else {\r\n\t\t\t\telement.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\tEventgallery.ClickableButton.click(e, href);\r\n\t\t\t\t}, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n    });\r\n})(Eventgallery, Eventgallery.jQuery);\r\n","(function(Eventgallery, jQuery){\r\n\r\n    /**\r\n     * Formats a list of images to appear square sized. This class is doing something like the Grid layout for events.\r\n     * @param newOptions\r\n     * @constructor\r\n     */\r\n    Eventgallery.SquareList = function(newOptions) {\r\n        Eventgallery.Imagelist.call(this, newOptions);\r\n    };\r\n\r\n    Eventgallery.SquareList.prototype = new Eventgallery.Imagelist();\r\n    Eventgallery.SquareList.prototype.constructor = Eventgallery.SquareList;\r\n\r\n\r\n    Eventgallery.SquareList.prototype.processList = function() {\r\n        /* processes the image list*/\r\n        var width = this.width;\r\n        var currentObject = this;\r\n        jQuery.each(this.images, function () {\r\n            this.setSize(width, width);\r\n        });\r\n    };\r\n\r\n})(Eventgallery, Eventgallery.jQuery);","(function(Eventgallery, jQuery){\r\n\r\n// create a tile layout and centers images in a tile\r\nEventgallery.TilesCollection = function(newOptions) {\r\n    this.options = {\r\n        tiles: jQuery('#events-tiles .event'),\r\n        tilesContainer: jQuery('#events-tiles .event-tiles')\r\n    };\r\n\t\r\n \tthis.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n    this.tiles = this.options.tiles;\r\n    this.tilesContainer = this.options.tilesContainer;\r\n\t\r\n};\r\n\r\nEventgallery.TilesCollection.prototype.calculate = function() {\r\n\t\tvar i;\r\n\t\tvar currentObject = this;\r\n    \tvar tilesPerRow = 1;\r\n        var tile = jQuery(this.tiles[0]);\r\n    \t // reset grid to support resize and media queries\r\n        jQuery.each(this.tiles, function(index, tile) {\r\n            jQuery(tile).css( {\r\n                'visibility' : 'hidden',\r\n                'position' : 'static',\r\n                'float' : 'left'\r\n            });\r\n        });\r\n\r\n        // calculate tiles per row    \r\n        var y = tile.position().top;\r\n\r\n\r\n        for(i=1; i<this.tiles.length; i++) {\r\n            if (jQuery(this.tiles[i]).position().top != y) {\r\n                break;\r\n            }\r\n            tilesPerRow++;\r\n\r\n        }\r\n\r\n        // create array of height values for the columns\r\n        var columnHeight = [];\r\n        for (i=0; i<tilesPerRow; i++) {\r\n            columnHeight.push(0);\r\n        }\r\n\r\n        var columnWidth = tile.outerWidth();\r\n\r\n        jQuery.each(this.tiles, function(index, tile) {\r\n            var $tile = jQuery(tile);\r\n            $tile.data('height', $tile.outerHeight());\r\n        });\r\n\r\n        jQuery.each(this.tiles, function(index, tile) {\r\n\r\n            var $tile =  jQuery(tile),\r\n                smallestColumn = currentObject.getSmallestColumn(columnHeight);\r\n\r\n            $tile.css({\r\n                'left' : smallestColumn * columnWidth,\r\n                'top' : columnHeight[smallestColumn]\r\n            });\r\n\r\n            columnHeight[smallestColumn] = columnHeight[smallestColumn] + $tile.data('height');\r\n        });\r\n        \r\n        jQuery.each(this.tiles, function(index, tile) {\r\n            jQuery(tile).css({\r\n                'visibility' : 'visible',\r\n                'position' : 'absolute',\r\n                'float' : 'none'\r\n            });\r\n        });\r\n\r\n        jQuery(this.tilesContainer).css('height', columnHeight[this.getHighestColumn(columnHeight)]);\r\n\r\n};\r\n    \r\n/* \r\n* returns the position of the smallest value in the array\r\n*/\t\r\nEventgallery.TilesCollection.prototype.getSmallestColumn = function(columnHeight) {\r\n\r\n    var smallestColumnValue = columnHeight[0];\r\n    var smallestColumnNumber = 0;\r\n    \r\n    for(var i=0; i<columnHeight.length; i++) {\r\n        if (smallestColumnValue>columnHeight[i]) {\r\n            smallestColumnValue=columnHeight[i];\r\n            smallestColumnNumber = i;\r\n        }\r\n    \r\n    }\r\n    return smallestColumnNumber;\r\n\r\n};\r\n    \r\n/* \r\n* returns the position of the highest value in the array\r\n*/\r\nEventgallery.TilesCollection.prototype.getHighestColumn = function(columnHeight) {\r\n\r\n    var columnValue = columnHeight[0];\r\n    var columnNumber = 0;\r\n    \r\n    for(var i=0; i<columnHeight.length; i++) {\r\n        if (columnValue<columnHeight[i]) {\r\n            columnValue=columnHeight[i];\r\n            columnNumber = i;\r\n        }\r\n    \r\n    }\r\n    return columnNumber;\r\n\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);   ","(function(Eventgallery, jQuery){\r\n/**\r\n * Touch navigation\r\n */\r\n\r\nEventgallery.Touch = function(newOptions) {\r\n\r\n    this.options = {\r\n    };\r\n    this.options = Eventgallery.Tools.mergeObjects(this.options, newOptions);\r\n};\r\n\r\nEventgallery.Touch.removeTouch = function (elementSelector) {\r\n    jQuery( elementSelector ).unbind( 'touchstart');\r\n    jQuery( elementSelector ).unbind( 'touchmove');\r\n    jQuery( elementSelector ).unbind( 'touchend');\r\n};\r\n\r\nEventgallery.Touch.addTouch = function (elementSelector, leftAction, rightAction, tabAction, allowScrolling) {\r\n\r\n    var index,\r\n        hDistance,\r\n        vDistance,\r\n        hDistanceLast,\r\n        vDistanceLast,\r\n        hDistancePercent,\r\n        vSwipe = false,\r\n        hSwipe = false,\r\n        hSwipMinDistance = 10,\r\n        vSwipMinDistance = 50,\r\n        startCoords = {},\r\n        endCoords = {},\r\n        winWidth = window.innerWidth ? window.innerWidth : $( window ).width(),\r\n        winHeight = window.innerHeight ? window.innerHeight : $( window ).height();\r\n\r\n    jQuery( elementSelector ).bind( 'touchstart', function( event ) {\r\n\r\n        jQuery( this ).addClass( 'touching' );\r\n\r\n        endCoords = event.originalEvent.targetTouches[0];\r\n        startCoords.pageX = event.originalEvent.targetTouches[0].pageX;\r\n        startCoords.pageY = event.originalEvent.targetTouches[0].pageY;\r\n\r\n\r\n\r\n        jQuery( '.touching' ).bind( 'touchmove',function( event ) {\r\n            if (allowScrolling !== true) {\r\n                event.preventDefault();\r\n                event.stopPropagation();\r\n            }\r\n            endCoords = event.originalEvent.targetTouches[0];\r\n\r\n            if ( ! hSwipe ) {\r\n                vDistanceLast = vDistance;\r\n                vDistance = endCoords.pageY - startCoords.pageY;\r\n                if ( Math.abs( vDistance ) >= vSwipMinDistance || vSwipe ) {\r\n                    vSwipe = true;\r\n                }\r\n            }\r\n\r\n            hDistanceLast = hDistance;\r\n            hDistance = endCoords.pageX - startCoords.pageX;\r\n            hDistancePercent = hDistance * 100 / winWidth;\r\n\r\n            if ( ! hSwipe && ! vSwipe && Math.abs( hDistance ) >= hSwipMinDistance ) {\r\n                hSwipe = true;\r\n            }\r\n\r\n        } );\r\n\r\n        return allowScrolling===true;\r\n\r\n    } ).bind( 'touchend',function( event ) {\r\n\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n\r\n        vDistance = endCoords.pageY - startCoords.pageY;\r\n        hDistance = endCoords.pageX - startCoords.pageX;\r\n        hDistancePercent = hDistance*100/winWidth;\r\n\r\n        // Swipe to bottom to close\r\n        if ( vSwipe ) {\r\n            vSwipe = false;\r\n            if ( Math.abs( vDistance ) >= 2 * vSwipMinDistance && Math.abs( vDistance ) > Math.abs( vDistanceLast ) ) {\r\n            } else {\r\n\r\n            }\r\n\r\n        } else if ( hSwipe ) {\r\n\r\n            hSwipe = false;\r\n\r\n            // swipeLeft\r\n            if( hDistance >= hSwipMinDistance && hDistance >= hDistanceLast) {\r\n                leftAction();\r\n\r\n                // swipeRight\r\n            } else if ( hDistance <= -hSwipMinDistance && hDistance <= hDistanceLast) {\r\n                rightAction();\r\n            }\r\n\r\n        } else { // Top and bottom bars have been removed on touchable devices\r\n            if (undefined !== tabAction)\r\n            {\r\n                tabAction();\r\n            } else {\r\n                jQuery(event.target).trigger(\"click\");\r\n            }\r\n        }\r\n\r\n\r\n        jQuery( '.touching' ).off( 'touchmove' ).removeClass( 'touching' );\r\n\r\n    } );\r\n\r\n};\r\n\r\n})(Eventgallery, Eventgallery.jQuery);\r\n","(function(jQuery) {\r\n\r\n\r\n}(eventgallery.jQuery));\r\n","import Polyfill from \"./Polyfill\";\r\n\r\n\r\n/**\r\n * this class is the basic modal of Event Gallery.\r\n */\r\nexport default class Overlay {\r\n\r\n    constructor() {\r\n        this.myDiv = null;\r\n        this.background = null;\r\n        this.body = document.body;\r\n        this.onClosed = undefined;\r\n        this.onLoad = undefined;\r\n        this.repositionTimer = null;\r\n        this.windowWidth = 0;\r\n        this.onResizeOverlay = () => {\r\n            this._setRositionTimer(false);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * opens an overlay. The content can be a url or content.\r\n     * Url start with http or /\r\n     *\r\n     * @param dataUrl\r\n     */\r\n    openOverlay(dataUrl) {\r\n\r\n\r\n        this.myDiv = document.createElement('div');\r\n        this.myDiv.id = 'eventgallery-overlay';\r\n        this.myDiv.innerHTML = '<i class=\"egfa egfa-2x egfa-cog egfa-spin\"></i>';\r\n        this.myDiv.style.opacity = '1 !important';\r\n        this.myDiv.style.position = 'absolute';\r\n        this.myDiv.style.maxWidth = '100%';\r\n\r\n        this.background = document.createElement('div');\r\n        this.background.id = 'eventgallery-overlay-background';\r\n        this.background.addEventListener('click', (e) => {\r\n            this.closeOverlay()\r\n        });\r\n\r\n        this.body.append(this.background);\r\n        this.body.append(this.myDiv);\r\n\r\n        this.reposition(true);\r\n\r\n        if (dataUrl.startsWith('http') || dataUrl.startsWith('/')) {\r\n            Overlay._getRemoteData(dataUrl, (data) => {\r\n                this._addContent(data);\r\n            })\r\n        } else {\r\n            this._addContent(`<button class=\"btn-close-overlay eventgallery-close-overlay\"><i class=\"egfa egfa-2x egfa-times-circle\"></i></button>` + dataUrl);\r\n        }\r\n\r\n        window.addEventListener('resize', this.onResizeOverlay);\r\n    }\r\n\r\n    /**\r\n     * triggers a timeout for the repositioning. This will avoid too much flickering.\r\n     *\r\n     * @param force\r\n     * @private\r\n     */\r\n    _setRositionTimer(force) {\r\n        if (this.repositionTimer) {\r\n            clearTimeout(this.repositionTimer)\r\n        }\r\n        this.repositionTimer = setTimeout(() => this.reposition(force), 500);\r\n    }\r\n\r\n    static _getRemoteData(url, callback) {\r\n        fetch(url)\r\n            .then(response => response.text())\r\n            .then(data => callback(data));\r\n    }\r\n\r\n    /**\r\n     * moves the given content into the content overlay. Executes the onload method when finished.\r\n     *\r\n     * @param content\r\n     * @private\r\n     */\r\n    _addContent(content) {\r\n        this.insertAndExecute(this.myDiv, content);\r\n\r\n        let elements = this.myDiv.getElementsByClassName('eventgallery-close-overlay');\r\n        for(let i=0; i<elements.length;i++) {\r\n            elements[i].addEventListener('click', (e) => {\r\n                this.closeOverlay()\r\n            });\r\n        }\r\n\r\n        this.reposition(true);\r\n\r\n        if (this.onLoad !== undefined) {\r\n            this.onLoad();\r\n        }\r\n\r\n        document.dispatchEvent(Polyfill.createNewEvent('eventgallery-images-added', {isOverlay: true}));\r\n    }\r\n\r\n    /**\r\n     * Closes the overlay and fires the onclose method if defined.\r\n     */\r\n    closeOverlay() {\r\n        window.removeEventListener('resize', this.onResizeOverlay);\r\n\r\n        Polyfill.removeHtmlElementNode(this.myDiv);\r\n        Polyfill.removeHtmlElementNode(this.background);\r\n        if (this.onClosed !== undefined) {\r\n            this.onClosed();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Move the overlay to a good position.\r\n     *\r\n     * @param force defines if we force the reposition. If set to false, we do it only in case the width of the window changed.\r\n     */\r\n    reposition(force) {\r\n\r\n        if (this.repositionTimer !== null) {\r\n            clearTimeout(this.repositionTimer);\r\n        }\r\n\r\n        let maxWidth = document.body.clientWidth;\r\n\r\n        if (!force) {\r\n            if (this.windowWidth === maxWidth) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        this.windowWidth = maxWidth;\r\n\r\n        this.myDiv.style.opacity = 0;\r\n        this.myDiv.style.top = 0;\r\n        this.myDiv.style.left = 0;\r\n\r\n        let maxHeight = window.innerHeight,\r\n            width = this.myDiv.offsetWidth,\r\n            height = this.myDiv.offsetHeight,\r\n            scrollTop = window.pageYOffset,\r\n            left = 0,\r\n            top = scrollTop;\r\n\r\n        if (maxWidth-width>0) {\r\n            left = (maxWidth - width) / 2;\r\n        }\r\n\r\n        if (maxHeight - height > 0) {\r\n            top = scrollTop + (maxHeight - height) / 2;\r\n        }\r\n\r\n        this.myDiv.style.top = top + 'px';\r\n        this.myDiv.style.left = left + 'px';\r\n        this.myDiv.style.opacity = 1;\r\n    };\r\n\r\n    insertAndExecute(htmlElement, newContent) {\r\n        htmlElement.innerHTML = newContent;\r\n        //we need a clone of that array.\r\n        let scripts = Array.prototype.slice.call(htmlElement.getElementsByTagName(\"script\"));\r\n        for (let i = 0; i < scripts.length; i++) {\r\n            if (scripts[i].src !== \"\") {\r\n                let tag = document.createElement(\"script\");\r\n                tag.src = scripts[i].src;\r\n                document.getElementsByTagName(\"head\")[0].appendChild(tag);\r\n            }\r\n            else {\r\n                eval(scripts[i].innerHTML);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import PhotoSwipeGallerySlide from \"./PhotoSwipeGallerySlide.js\";\r\nimport PhotoSwipe from \"../../photoswipe/photoswipe\";\r\nimport PhotoSwipeUIDefault from \"../../photoswipe/photoswipe-ui-default.js\";\r\nimport Polyfill from \"./Polyfill\";\r\nimport Overlay from \"./Overlay\";\r\nimport SlideShow from \"./SlideShow\";\r\nimport {getParents} from \"../../common/js/Helpers\";\r\n\r\nconst PSWP_CONTROLS_MAIN_ELEMENT_CLASS = 'pswp';\r\nconst PSW_CONTROLS_SLIDESHOW_BUTTON_ELEMENT_CLASS = 'pswp__button--playpause';\r\nconst PSW_HIDE_CLASS = 'pswp_hide';\r\n\r\nconst PSWP_CONTROLS = `<div class=\"pswp\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n\t    \t<div class=\"pswp__bg\"></div>\r\n\t    \t<div class=\"pswp__scroll-wrap\">\r\n\t        <div class=\"pswp__container\">\r\n\t            <div class=\"pswp__item\"></div>\r\n\t            <div class=\"pswp__item\"></div>\r\n\t            <div class=\"pswp__item\"></div>\r\n\t        </div>\r\n\t        <div class=\"pswp__ui pswp__ui--hidden\">\r\n\t            <div class=\"pswp__top-bar\">\r\n\t                <div class=\"pswp__counter\"></div>\r\n\t                <button class=\"pswp__button pswp__button--close\" title=\"{{CLOSE}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--share\" title=\"{{SHARE}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--download\" title=\"{{DOWNLOAD}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--add2cart\" title=\"{{BUY}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--fs\" title=\"{{FULLSCREEN}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--playpause pswp_hide\" data-title-pause=\"{{PAUSESLIDESHOW}}\" data-title-play=\"{{PLAYSLIDESHOW}}\" title=\"{{PLAYSLIDESHOW}}\"></button>\r\n\t                <button class=\"pswp__button pswp__button--zoom\" title=\"{{ZOOM}}\"></button>\r\n\t                <div class=\"pswp__preloader\">\r\n\t                    <div class=\"pswp__preloader__icn\">\r\n\t                      <div class=\"pswp__preloader__cut\">\r\n\t                        <div class=\"pswp__preloader__donut\"></div>\r\n\t                      </div>\r\n\t                    </div>\r\n\t                </div>\r\n\t            </div>\r\n\t            <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\r\n\t                <div class=\"pswp__share-tooltip\"></div> \r\n\t            </div>\r\n\t            <button class=\"pswp__button pswp__button--arrow--left\" title=\"{{PREVIOUS}}\">\r\n\t            </button>\r\n\t            <button class=\"pswp__button pswp__button--arrow--right\" title=\"{{NEXT}}\">\r\n\t            </button>\r\n\t            <div class=\"pswp__caption\">\r\n\t                <div class=\"pswp__caption__center\"></div>\r\n\t            </div>\r\n\t          </div>\r\n\t        </div>\r\n\t\t</div>`;\r\n\r\nexport default class PhotoSwipeGallery {\r\n\r\n    constructor() {\r\n        this._isOpen = false;\r\n        this._gallery = null;\r\n    }\r\n\r\n    /**\r\n     * Finds all thumbnail containers on the page\r\n     * @returns {NodeListOf<Element>}\r\n     */\r\n    static getThumbnailContainers() {\r\n        let thumbnailContainer = document.querySelectorAll( 'a[data-eg-lightbox]' );\r\n\r\n        // don't add images from the clone slides. They are not clickable but will add duplicates to the lightbox => #818\r\n        return Array.from(thumbnailContainer).filter((tc => {\r\n            let parents = getParents(tc);\r\n            let thumbnailContainerIsAllowed = true;\r\n            parents.forEach(parent => {\r\n                if (thumbnailContainerIsAllowed && parent.classList.contains('glide__slide--clone')) {\r\n                    thumbnailContainerIsAllowed = false;\r\n                }\r\n            });\r\n            return thumbnailContainerIsAllowed;\r\n        }))\r\n    }\r\n\r\n    static translate(input) {\r\n        let result = input;\r\n\r\n        if (window.EventGalleryLightboxConfiguration) {\r\n            result = result.replace('{{CLOSE}}', EventGalleryLightboxConfiguration.KEY_CLOSE);\r\n            result = result.replace('{{SHARE}}', EventGalleryLightboxConfiguration.KEY_SHARE);\r\n            result = result.replace('{{DOWNLOAD}}', EventGalleryLightboxConfiguration.KEY_DOWNLOAD);\r\n            result = result.replace('{{BUY}}', EventGalleryLightboxConfiguration.KEY_BUY);\r\n            result = result.replace('{{ZOOM}}', EventGalleryLightboxConfiguration.KEY_ZOOM);\r\n            result = result.replace('{{PREVIOUS}}', EventGalleryLightboxConfiguration.KEY_PREVIOUS);\r\n            result = result.replace('{{NEXT}}', EventGalleryLightboxConfiguration.KEY_NEXT);\r\n            result = result.replace('{{FULLSCREEN}}', EventGalleryLightboxConfiguration.KEY_FULLSCREEN);\r\n            result = result.replace('{{PLAYSLIDESHOW}}', EventGalleryLightboxConfiguration.KEY_PLAYSLIDESHOW);\r\n            result = result.replace('{{PAUSESLIDESHOW}}', EventGalleryLightboxConfiguration.KEY_PAUSESLIDESHOW);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * append the photoswipe controls to the body element. If there is already a control element, we delete it.\r\n     */\r\n    static appendControlls() {\r\n        let controllElements = document.getElementsByClassName(PSWP_CONTROLS_MAIN_ELEMENT_CLASS);\r\n        for(let i=0;i<controllElements.length; i++) {\r\n            Polyfill.removeHtmlElementNode(controllElements[i]);\r\n        }\r\n        let div = document.createElement('div');\r\n        div.innerHTML = PhotoSwipeGallery.translate(PSWP_CONTROLS);\r\n        document.getElementsByTagName('body')[0].appendChild(div);\r\n    }\r\n\r\n    static closest(el, fn) {\r\n        return el && ( fn(el) ? el : PhotoSwipeGallery.closest(el.parentNode, fn) );\r\n    };\r\n\r\n    static parseHash() {\r\n        return PhotoSwipeGallery._parseHashString(window.location.hash.substring(1));\r\n    }\r\n\r\n    /**\r\n     * splits a hash value into its elements. returns an empty object if there is nothing in\r\n     */\r\n    static _parseHashString(hash) {\r\n        let params = {};\r\n\r\n        if(hash.length < 5) {\r\n            return params;\r\n        }\r\n\r\n        let vars = hash.split('&');\r\n        for (let i = 0; i < vars.length; i++) {\r\n            if(!vars[i]) {\r\n                continue;\r\n            }\r\n            let pair = vars[i].split('=');\r\n            if(pair.length < 2) {\r\n                continue;\r\n            }\r\n            params[pair[0]] = pair[1];\r\n        }\r\n\r\n        return params;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param thumbnailContainer Node\r\n     * @returns PhotoSwipeGallerySlide\r\n     */\r\n    static parseThumbnailElement(thumbnailContainer) {\r\n        let item,\r\n            imgEl,\r\n            height,\r\n            width,\r\n            pid,\r\n            gid;\r\n\r\n        // include only element nodes\r\n        if(thumbnailContainer.nodeType !== 1) {\r\n            return null;\r\n        }\r\n\r\n        imgEl = thumbnailContainer.getElementsByTagName('IMG')[0];\r\n\r\n        if (imgEl === undefined) {\r\n            return null;\r\n        }\r\n\r\n        height = thumbnailContainer.getAttribute('data-height');\r\n        width = thumbnailContainer.getAttribute('data-width');\r\n        pid = thumbnailContainer.getAttribute('data-pid');\r\n        gid = thumbnailContainer.getAttribute('data-gid');\r\n\r\n        if (height === null || width === null || pid === null) {\r\n            return null;\r\n        }\r\n\r\n        // create slide object\r\n        item = new PhotoSwipeGallerySlide();\r\n        item.src = thumbnailContainer.getAttribute('href');\r\n        item.w = parseInt(width, 10);\r\n        item.h = parseInt(height, 10);\r\n\r\n        item.title = decodeURIComponent(thumbnailContainer.getAttribute('data-title'));\r\n\r\n        item.pid = parseInt(pid, 10);\r\n\r\n        item.gid = gid;\r\n\r\n        item.thumbnailContainer = thumbnailContainer; // save link to element for getThumbBoundsFn\r\n\r\n        return item;\r\n    };\r\n\r\n\r\n\r\n    /**\r\n     * searches the galleries for a thumbnail container and returns the\r\n     * Slide object\r\n     *\r\n     * @param thumbnailContainer\r\n     * @returns PhotoSwipeGallerySlide\r\n     */\r\n    getSlideBy(thumbnailContainer) {\r\n        let galleries = this.getGalleries();\r\n\r\n        for(let gallery of galleries.values()) {\r\n            for (let i = 0, l = gallery.length; i < l; i++) {\r\n                if (gallery[i].thumbnailContainer === thumbnailContainer) {\r\n                    return gallery[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param slide PhotoSwipeGallerySlide\r\n     * @returns {*|number}\r\n     */\r\n    getIndexOfSlide(slide) {\r\n        let slides = this.getGalleries().get(slide.gid);\r\n        return slides.map(function(e) { return e.hash(); }).indexOf(slide.hash());\r\n    }\r\n\r\n    /**\r\n     * Parses all elements on the page so we know which triggers for a lightbox exist.\r\n     * Returns a mal containing the gallery and all elements\r\n     * @returns {Map<String, Array>}\r\n     */\r\n    getGalleries() {\r\n        let galleries = new Map(),\r\n            thumbnails = PhotoSwipeGallery.getThumbnailContainers();\r\n\r\n        for(let i=0; i<thumbnails.length; i++) {\r\n            let thumbnailContainer = thumbnails[i];\r\n            let gallery;\r\n\r\n            let item = PhotoSwipeGallery.parseThumbnailElement(thumbnailContainer);\r\n            if (item !== null) {\r\n                if (galleries.get(item.gid) === undefined) {\r\n                    galleries.set(item.gid, []);\r\n                }\r\n                gallery = galleries.get(item.gid);\r\n                gallery.push(item);\r\n                galleries.set(item.gid, gallery);\r\n            }\r\n        }\r\n\r\n        return galleries;\r\n    }\r\n\r\n    onThumbnailsClick(e) {\r\n        e = e || window.event;\r\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\r\n\r\n        let eTarget = e.target || e.srcElement;\r\n\r\n        // leave the icons for cart&sharing alone\r\n        let iconContainer = PhotoSwipeGallery.closest(eTarget, function(el) {\r\n            return (el.classList && el.classList.contains('eventgallery-icon-container'));\r\n        });\r\n        if (iconContainer !== null) {\r\n            return;\r\n        }\r\n\r\n        // find root element of slide\r\n        let clickedListItem = PhotoSwipeGallery.closest(eTarget, function(el) {\r\n            return (el.tagName && el.tagName.toUpperCase() === 'A');\r\n        });\r\n\r\n        if(!clickedListItem) {\r\n            return;\r\n        }\r\n\r\n        let slide = this.getSlideBy(clickedListItem);\r\n        let index = this.getIndexOfSlide(slide);\r\n        let slides = this.getGalleries().get(slide.gid);\r\n\r\n        if(index >= 0) {\r\n            // open PhotoSwipe if valid index found\r\n            this.openPhotoSwipe( index, slides );\r\n        }\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param index\r\n     * @param slides\r\n     * @param disableAnimation\r\n     * @param fromURL\r\n     */\r\n    openPhotoSwipe(index, slides, disableAnimation, fromURL) {\r\n        let pswpElement = document.querySelectorAll('.pswp')[0],\r\n            options;\r\n\r\n        if (slides === undefined || slides.length === 0 ) {\r\n            return;\r\n        }\r\n\r\n        // define options (if needed)\r\n        options = {\r\n            galleryPIDs:true,\r\n\r\n            // define gallery index (for URL)\r\n            galleryUID: slides[0].gid,\r\n\r\n            shareEl: slides[0].thumbnailContainer ? slides[0].thumbnailContainer.getElementsByClassName('social-share-button').length>0 : false,\r\n\r\n            downloadEl : slides[0].thumbnailContainer ? slides[0].thumbnailContainer.getElementsByClassName('eg-download').length>0 : false,\r\n\r\n            add2cartEl: slides[0].thumbnailContainer ? slides[0].thumbnailContainer.getElementsByClassName('eventgallery-add2cart').length>0 : false,\r\n\r\n            getThumbBoundsFn: disableAnimation? null: function(index) {\r\n                // See Options -> getThumbBoundsFn section of documentation for more info\r\n                let slide = slides[index],\r\n                    thumbnail = slide.thumbnailContainer.getElementsByTagName('img')[0], // find thumbnail\r\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\r\n                    rect = thumbnail.getBoundingClientRect();\r\n\r\n                let w = rect.width,\r\n                    h = rect.height,\r\n                    x,\r\n                    y,\r\n                    ratio = slide.w/slide.h;\r\n\r\n                if (slide.h > slide.w) {\r\n                    x = rect.left;\r\n                    y = rect.top - Math.ceil( ((w / ratio)-h) / 2) + pageYScroll;\r\n                } else {\r\n                    x = rect.left - Math.ceil( ((h * ratio)-w) / 2  );\r\n                    y = rect.top + pageYScroll;\r\n                    w = Math.ceil(h * ratio);\r\n                }\r\n                return {x, y, w};\r\n            },\r\n            overlayClass : Overlay\r\n\r\n\r\n\r\n        };\r\n\r\n        // disable close gestures to avoid trouble with the add2cart dialog.\r\n        options.pinchToClose = !options.add2cartEl;\r\n        options.closeOnVerticalDrag = !options.add2cartEl;\r\n        options.closeOnScroll = !options.add2cartEl;\r\n\r\n        if (window.EventGalleryLightboxConfiguration) {\r\n            if (parseInt(window.EventGalleryLightboxConfiguration.navigationFadeDelay) > 0) {\r\n                options.timeToIdle = parseInt(window.EventGalleryLightboxConfiguration.navigationFadeDelay);\r\n                options.timeToIdleOutside = parseInt(window.EventGalleryLightboxConfiguration.navigationFadeDelay);\r\n            }\r\n        }\r\n\r\n        // PhotoSwipe opened from URL\r\n        if(fromURL) {\r\n            if(options.galleryPIDs) {\r\n                index = parseInt(index, 10);\r\n                // parse real index when custom PIDs are used\r\n                // http://photoswipe.com/documentation/faq.html#custom-pid-in-url\r\n                for(let j = 0; j < slides.length; j++) {\r\n                    if(slides[j].pid === index) {\r\n                        options.index = j;\r\n                        break;\r\n                    }\r\n                }\r\n            } else {\r\n                // in URL indexes start from 1\r\n                options.index = parseInt(index, 10) - 1;\r\n            }\r\n        } else {\r\n            options.index = parseInt(index, 10);\r\n        }\r\n\r\n        // exit if index not found\r\n        if( isNaN(options.index) ) {\r\n            return;\r\n        }\r\n\r\n        if(disableAnimation) {\r\n            options.showAnimationDuration = 0;\r\n        }\r\n\r\n        // Pass data to PhotoSwipe and initialize it\r\n        this._gallery = new PhotoSwipe( pswpElement, PhotoSwipeUIDefault, slides, options);\r\n        this._gallery.init();\r\n\r\n        this.initSlideShow();\r\n\r\n        this._isOpen = true;\r\n        this._gallery.listen('close', () => {\r\n            return this._isOpen = false;\r\n        });\r\n\r\n        this._gallery.listen('afterChange', () => {\r\n            document.dispatchEvent(Polyfill.createNewEvent('eventgallery-lightbox-changed'));\r\n        });\r\n\r\n        document.dispatchEvent(Polyfill.createNewEvent('eventgallery-lightbox-opened'));\r\n    };\r\n\r\n    initPhotoSwipe() {\r\n        PhotoSwipeGallery.appendControlls();\r\n\r\n        this._registerClickEvents();\r\n\r\n        // Parse URL and open gallery if it contains #&pid=3&gid=1\r\n        let hashData = PhotoSwipeGallery.parseHash();\r\n        if(hashData.pid && hashData.gid) {\r\n            this.openPhotoSwipe( hashData.pid ,  this.getGalleries().get(hashData.gid), true, true );\r\n        }\r\n    };\r\n\r\n    _registerClickEvents() {\r\n        // loop through all gallery elements and bind events\r\n        let galleries = this.getGalleries();\r\n\r\n        for(let gallery of galleries.values()) {\r\n            for (let i = 0, l = gallery.length; i < l; i++) {\r\n                gallery[i].thumbnailContainer.onclick = (e) => {this.onThumbnailsClick(e)};\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * grabs the current slide from the lightbox\r\n     * @returns PhotoSwipeGallerySlide\r\n     */\r\n    getCurrentSlide() {\r\n        return this._gallery.currItem;\r\n    }\r\n\r\n    /**\r\n     * Returns the index if the current item in the lightbox\r\n     *\r\n     * @returns {int}\r\n     */\r\n    getCurrentIndex() {\r\n        return this._gallery.getCurrentIndex();\r\n    }\r\n\r\n    /**\r\n     * reinitiate the lightbox. Register the click events for existing and new elements.\r\n     */\r\n    reload() {\r\n        this._registerClickEvents();\r\n    }\r\n\r\n    /**\r\n     * reports back if the lightbox is currently open\r\n     * @returns {boolean}\r\n     */\r\n    isOpen() {\r\n        return this._isOpen;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param afterChangeFunction\r\n     */\r\n    setAfterChangeEventListener(afterChangeFunction) {\r\n        this._gallery.listen('afterChange', afterChangeFunction);\r\n    }\r\n\r\n    /**\r\n     * jump to a specific slide.\r\n     * @param index\r\n     */\r\n    gotoSlide(index) {\r\n        this._gallery.goTo(index);\r\n    }\r\n\r\n    /**\r\n     * Adds a slide to the slide deck of the current _gallery\r\n     * @param slide PhotoSwipeGallerySlide\r\n     */\r\n    pushSlide(slide) {\r\n        this._gallery.items.push(slide);\r\n    }\r\n\r\n    /**\r\n     * removes a slide from the slide deck of the current _gallery\r\n     * @returns {PhotoSwipeGallerySlide}\r\n     */\r\n    popSlide() {\r\n        return this._gallery.items.pop();\r\n    }\r\n\r\n    /**\r\n     * reloads a slide after a modification\r\n     */\r\n    reloadSlide() {\r\n        this._gallery.invalidateCurrItems();\r\n        this._gallery.updateSize(true);\r\n    }\r\n\r\n    /**\r\n     * switch to the next slide\r\n     */\r\n    nextSlide() {\r\n        this._gallery.next();\r\n    }\r\n\r\n    /**\r\n     * Fire up the slide show stuff\r\n     */\r\n    initSlideShow() {\r\n        if (!window.EventGalleryLightboxConfiguration) {\r\n            return;\r\n        }\r\n\r\n        if (!window.EventGalleryLightboxConfiguration.doUseSlideshow) {\r\n\r\n            return;\r\n        }\r\n\r\n        document.getElementsByClassName(PSW_CONTROLS_SLIDESHOW_BUTTON_ELEMENT_CLASS)[0].classList.remove(PSW_HIDE_CLASS);\r\n\r\n        let slideShow = new SlideShow(this);\r\n        slideShow.setDelay(window.EventGalleryLightboxConfiguration.slideshowSpeed);\r\n\r\n        if (window.EventGalleryLightboxConfiguration.doUseAutoplay) {\r\n            slideShow.toggleSlideShowState();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * make the listen function of PhotoSwipe available\r\n     *\r\n     * @param eventName\r\n     * @param fn\r\n     */\r\n    listen(eventName, fn) {\r\n        this._gallery.listen(eventName, fn);\r\n    }\r\n\r\n\r\n}\r\n\r\n\r\n\r\n/* override handling of Esc key to stop slideshow on first esc (note Esc to leave fullscreen never gets here) */\r\n\r\n/*$(document).keydown(function(e) {\r\n    if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;\r\n    if ((e.key === \"Escape\" || e.which == 27 ) && !!lightBox) {\r\n        if (e.preventDefault)  e.preventDefault();\r\n        else  e.returnValue = false;\r\n        if (ssRunning) {\r\n            setSlideshowState(ssButtonClass, false);\r\n        } else {\r\n            lightBox.close();\r\n        }\r\n    }\r\n});\r\n*/\r\n","\r\nexport default class PhotoSwipeGallerySlide {\r\n    constructor() {\r\n        this.w = 0;\r\n        this.h = 0;\r\n        this.src = '';\r\n        this.title = '';\r\n        this.pid = '';\r\n        this.gid = '';\r\n        this.thumbnailContainer = null;\r\n        this.msrc= '';\r\n    }\r\n\r\n    hash() {\r\n        return this.gid + this.src;\r\n    }\r\n}\r\n","import PhotoSwipeGallery from \"./PhotoSwipeGallery\";\r\n\r\n/**\r\n * Builds a slide show on top of PhotoSwipe.\r\n */\r\nexport default class SlideShow {\r\n\r\n    /**\r\n     *\r\n     * @param photoSwipeGallery PhotoSwipeGallery\r\n     */\r\n    constructor(photoSwipeGallery) {\r\n        this._photoSwipeGallery = photoSwipeGallery;\r\n        this._SlideShow_Running = false;\r\n        this._currentTimer = null;\r\n        this._SlideShow_Delay = 2000 /*ms*/;\r\n        this._SlideShow_Button = document.getElementsByClassName('pswp__button--playpause')[0];\r\n\r\n        let interactionHandler = (e) => {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            return this.toggleSlideShowState();\r\n        };\r\n\r\n        // take care about both click and touch.\r\n        this._SlideShow_Button.onclick = interactionHandler;\r\n        this._SlideShow_Button.ontouchstart = interactionHandler;\r\n\r\n        this._photoSwipeGallery.listen('afterChange', () => {\r\n            this._planNextSwitch(false);\r\n        });\r\n\r\n        this._photoSwipeGallery.listen('destroy', () => this._photoSwipeGallery=null);\r\n\r\n        this._photoSwipeGallery.listen('userInteractionHappened', () => this._stopSlideshow());\r\n        this._photoSwipeGallery.listen('mainScrollAnimStart', () => this._stopSlideshow());\r\n\r\n\r\n        this._adjustNavigation();\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param delay int\r\n     */\r\n    setDelay(delay) {\r\n        this._SlideShow_Delay = delay;\r\n    }\r\n\r\n    /**\r\n     * switches the slide show on/off depending on the current state\r\n     */\r\n    toggleSlideShowState() {\r\n\r\n        if (this._SlideShow_Running) {\r\n            this._stopSlideshow();\r\n        } else {\r\n            this._startSlideshow();\r\n        }\r\n    }\r\n\r\n    _stopSlideshow() {\r\n        this._SlideShow_Running = false;\r\n        this._adjustNavigation();\r\n    }\r\n\r\n    _startSlideshow() {\r\n        this._SlideShow_Running = true;\r\n        this._planNextSwitch(true);\r\n        this._adjustNavigation();\r\n    }\r\n\r\n    /**\r\n     * make sure the navigation displays the current slide show state.\r\n     */\r\n    _adjustNavigation() {\r\n        this._SlideShow_Button.classList.remove(this._SlideShow_Running ? \"play\" : \"pause\");\r\n        this._SlideShow_Button.classList.add(this._SlideShow_Running ? \"pause\" : \"play\");\r\n        this._SlideShow_Button.setAttribute('title', this._SlideShow_Running ? this._SlideShow_Button.getAttribute('data-title-pause'): this._SlideShow_Button.getAttribute('data-title-play'));\r\n    }\r\n\r\n    /**\r\n     * create the timeout for the next switch.\r\n     *\r\n     * @param isForTheFirstSwitch Boolean changes the switch time so the first switch can be faster\r\n     */\r\n    _planNextSwitch(isForTheFirstSwitch)  {\r\n        clearTimeout(this._currentTimer);\r\n        this._currentTimer = setTimeout(() => this._nextSlide(), isForTheFirstSwitch ? this._SlideShow_Delay / 2.0 :this._SlideShow_Delay);\r\n    }\r\n\r\n    /**\r\n     * change to the next slide\r\n     */\r\n    _nextSlide() {\r\n        if (this._photoSwipeGallery === null) {\r\n            return;\r\n        }\r\n\r\n        if (!this._SlideShow_Running) {\r\n            return;\r\n        }\r\n\r\n        this._photoSwipeGallery.nextSlide();\r\n    }\r\n}","export default class URLHelper {\r\n\r\n    constructor() {\r\n    }\r\n\r\n    /**\r\n     * splits a URL parameter like foo=bar&1=2 into a parameter map\r\n     *\r\n     * @param urlParameterString\r\n     * @returns {Map<any, any>}\r\n     */\r\n    static parseURLParameter(urlParameterString) {\r\n        let pairs = urlParameterString.split('&');\r\n        let parameters = new Map();\r\n\r\n        pairs.forEach(pair => {\r\n            let splittedPair = pair.split('=');\r\n            if (splittedPair.length === 2) {\r\n                parameters.set(splittedPair[0], splittedPair[1]);\r\n            }\r\n        });\r\n\r\n        return parameters;\r\n    }\r\n\r\n    /**\r\n     * returns a map of the query string of an full url\r\n     *\r\n     * @param urlSring\r\n     * @returns {URLSearchParams}\r\n     */\r\n    static getParameters(urlSring) {\r\n        let parts = urlSring.split('?');\r\n        if (parts.length < 2) {\r\n            return new Map();\r\n        }\r\n        let queryParts = parts[1].split('#');\r\n        return URLHelper.parseURLParameter(queryParts[0]);\r\n    }\r\n\r\n    /**\r\n     * returns the url from strings like \"url ('foobar.jpg')\"\r\n     *\r\n     * @param urlString\r\n     * @returns {*}\r\n     */\r\n    static extractBackgroudUrl(urlString) {\r\n        return urlString.replace(/(url\\(|\\)|\"|')/g, '');\r\n    }\r\n};\r\n\r\n\r\n","import EventsHandler from \"../utils/eventshandler\";\r\n\r\nexport default function (Glide, Components, Events) {\r\n    /**\r\n     * Instance of the binder for DOM Events.\r\n     *\r\n     * @type {EventsHandler}\r\n     */\r\n    const Binder = new EventsHandler();\r\n\r\n    /**\r\n     * Holds preventing status of anchors.\r\n     * If `true` redirection after click will be disabled.\r\n     *\r\n     * @private\r\n     * @type {Boolean}\r\n     */\r\n    let prevented = false;\r\n\r\n    let isSwiping = false;\r\n\r\n    const Anchors = {\r\n        /**\r\n         * Setups a initial state of anchors component.\r\n         *\r\n         */\r\n        mount () {\r\n            /**\r\n             * Holds collection of anchors elements.\r\n             *\r\n             * @private\r\n             * @type {HTMLCollection}\r\n             */\r\n            this._a = Components.Html.wrapper.querySelectorAll('a,span,img');\r\n\r\n            this.bind();\r\n            isSwiping = false;\r\n        },\r\n\r\n        /**\r\n         * Binds events to anchors inside a track.\r\n         *\r\n         */\r\n        bind () {\r\n            Binder.on('click', Components.Html.wrapper, this.click, true)\r\n        },\r\n\r\n        /**\r\n         * Unbinds events attached to anchors inside a track.\r\n         *\r\n         */\r\n        unbind () {\r\n            Binder.off('click', Components.Html.wrapper)\r\n        },\r\n\r\n        /**\r\n         * Handler for click event. Prevents clicks when glide is in `prevent` status.\r\n         *\r\n         * @param  {Object} event\r\n         */\r\n        click (event) {\r\n            if (prevented) {\r\n                event.stopPropagation();\r\n                event.preventDefault()\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Detaches anchors click event inside glide.\r\n         *\r\n         * @return {self}\r\n         */\r\n        detach () {\r\n            prevented = true;\r\n\r\n            return this\r\n        },\r\n\r\n        /**\r\n         * Attaches anchors click events inside glide.\r\n         *\r\n         * @return {self}\r\n         */\r\n        attach () {\r\n            prevented = false;\r\n\r\n            return this\r\n        }\r\n    };\r\n\r\n    Object.defineProperty(Anchors, 'items', {\r\n        /**\r\n         * Gets collection of the arrows HTML elements.\r\n         *\r\n         * @return {HTMLElement[]}\r\n         */\r\n        get () {\r\n            return Anchors._a\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Detach anchors inside slides:\r\n     * - on swiping, so they won't redirect to its `href` attributes\r\n     */\r\n    Events.on('swipe.move', () => {\r\n        Anchors.detach();\r\n    });\r\n\r\n    /**\r\n     * Attach anchors inside slides:\r\n     * - after swiping and transitions ends, so they can redirect after click again\r\n     */\r\n    Events.on('swipe.end', () => {\r\n        Components.Transition.after(() => {\r\n            Anchors.attach()\r\n        });\r\n    });\r\n\r\n    /**\r\n     * Unbind anchors inside slides:\r\n     * - on destroying, to bring anchors to its initial state\r\n     */\r\n    Events.on('destroy', () => {\r\n        Anchors.attach();\r\n        Anchors.unbind();\r\n        Binder.destroy()\r\n    });\r\n\r\n    return Anchors\r\n}\r\n","import CamelCaseConverter from \"../utils/camelCaseConverter\";\r\n\r\nconst prefix = \"data-slider-\";\r\n\r\nexport default class SliderOptions {\r\n\r\n    constructor(element) {\r\n        this.element = element;\r\n        this.options = Object.assign({\r\n            autoplay: false,\r\n            slidesElementsSelector: '',\r\n            numberOfRowsPerSlide: 1,\r\n            showNav: 'true',\r\n        }, SliderOptions._parseOptions(element));\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param element HTMLElement\r\n     * @private\r\n     */\r\n    static _parseOptions(element) {\r\n        let options = {};\r\n\r\n        let attributes = element.attributes;\r\n        for (let i =0; i< attributes.length; i++) {\r\n            if (attributes[i].name.indexOf(prefix) === 0) {\r\n                options[CamelCaseConverter.toCamelCase(attributes[i].name.replace(prefix,''))] = attributes[i].value;\r\n            }\r\n        }\r\n\r\n        return options;\r\n    }\r\n\r\n    getAutoPlay() {\r\n\r\n        if (this.options.autoplay === false) {\r\n            return false;\r\n        }\r\n        return parseInt(this.options.autoplay);\r\n    }\r\n\r\n    getSlidesElementsSelector() {\r\n        return this.options.slidesElementsSelector;\r\n    }\r\n\r\n    doShowNav() {\r\n        return this.options.showNav === 'true';\r\n    }\r\n\r\n    getNumberOfRowsPerSlide() {\r\n        return parseInt(this.options.numberOfRowsPerSlide);\r\n    }\r\n}\r\n","import Anchor from \"../glide_modules/anchor\"\r\nimport Glide, { Controls, Breakpoints, Swipe, Autoplay, Images  } from '@glidejs/glide/dist/glide.modular.esm'\r\nimport SliderTransformator from \"./SliderTransformator\";\r\nimport SliderOptions from \"./SliderOptions\";\r\nimport ElementSize from \"../utils/ElementSize\";\r\nimport EventgalleryLazyload from \"../EventgalleryLazyload\";\r\n\r\nexport default class SliderStarter {\r\n\r\n    constructor(sourceGroupElement) {\r\n        this.sourceGroupElement = sourceGroupElement;\r\n        this.sliderTransformator = null;\r\n    }\r\n\r\n    start() {\r\n\r\n        this.sliderOptions = SliderStarter._loadOptions(this.sourceGroupElement);\r\n\r\n        let sourceElementSelector = this.sliderOptions.getSlidesElementsSelector();\r\n        let autoplay = this.sliderOptions.getAutoPlay();\r\n        let doShowNav = this.sliderOptions.doShowNav();\r\n        let numberOfItemsPerSlide = ElementSize.calclateNumberOfFittingItemsPerSlide(this.sourceGroupElement, this.sourceGroupElement.querySelector(sourceElementSelector), this.sliderOptions.getNumberOfRowsPerSlide());\r\n\r\n        if (null == this.sliderTransformator) {\r\n            this.sliderTransformator = new SliderTransformator(this.sourceGroupElement, sourceElementSelector, doShowNav);\r\n        }\r\n        let rootElement = this.sliderTransformator.transform(numberOfItemsPerSlide);\r\n\r\n        if (rootElement === null) {\r\n            return;\r\n        }\r\n\r\n        EventgalleryLazyload.watchImages();\r\n\r\n        let glide = new Glide(rootElement, {\r\n            type: 'carousel',\r\n            perView: 1,\r\n            gap: 15,\r\n            keyboard: false,\r\n            autoplay: autoplay\r\n        });\r\n\r\n        glide.mount({ Swipe, Controls, Breakpoints, Autoplay, Anchor, Images  });\r\n\r\n    }\r\n\r\n    static _loadOptions(element) {\r\n        return new SliderOptions(element);\r\n    }\r\n\r\n\r\n}\r\n","import Polyfill from \"../Polyfill\";\r\n\r\nconst sliderRootSelector = '.glide';\r\nconst sliderGroupSelector = '.glide__slides';\r\nconst basicMarkup = `\r\n<div class=\"glide\">\r\n    <div class=\"glide__track\" data-glide-el=\"track\">\r\n        <ul class=\"glide__slides\">            \r\n        </ul>\r\n    </div>\r\n    <div class=\"glide__arrows\" data-glide-el=\"controls\">\r\n        <button class=\"glide__arrow glide__arrow--left\" data-glide-dir=\"<\">prev</button>\r\n        <button class=\"glide__arrow glide__arrow--right\" data-glide-dir=\">\">next</button>\r\n    </div>\r\n</div>`;\r\n\r\nexport default class SliderTransformator {\r\n\r\n    constructor(sourceGroupElement, sourceElementSelector, doShowNav) {\r\n        this.elementSelector = sourceElementSelector;\r\n        this.sourceGroupElement = sourceGroupElement;\r\n        this.doShowNav = doShowNav;\r\n        this.sourceElements = this.getSourceElements();\r\n    }\r\n\r\n    getSourceElements() {\r\n        if (this.sourceGroupElement === null) {\r\n            return null;\r\n        }\r\n        return this.sourceGroupElement.querySelectorAll(this.elementSelector);\r\n    }\r\n\r\n    transform(numberOfItemsPerSlide) {\r\n        if (this.sourceGroupElement === null || this.sourceElements === null) {\r\n            return null;\r\n        }\r\n\r\n        if (this.sourceElements.length === 0) {\r\n            return null;\r\n        }\r\n        // cleanup\r\n        let sliderRoot = this.sourceGroupElement.querySelector(sliderRootSelector);\r\n\r\n        if (sliderRoot !== null) {\r\n            sliderRoot.remove();\r\n        }\r\n        // transformation\r\n\r\n        let sliderMarkup = document.createRange().createContextualFragment(basicMarkup);\r\n        if (!this.doShowNav) {\r\n\r\n            let controlElement = sliderMarkup.querySelector('.glide__arrows');\r\n\r\n            Polyfill.removeHtmlElementNode(controlElement);\r\n        }\r\n        let sliderGroupElement = sliderMarkup.querySelector(sliderGroupSelector);\r\n        let currentSliderElement = null;\r\n\r\n        for(let index=0; index<this.sourceElements.length; index++) {\r\n            let element = this.sourceElements[index];\r\n            if (index % numberOfItemsPerSlide === 0) {\r\n                currentSliderElement = document.createElement('li');\r\n                currentSliderElement.className = 'glide__slide';\r\n                sliderGroupElement.appendChild(currentSliderElement);\r\n            }\r\n            currentSliderElement.appendChild(element);\r\n        }\r\n\r\n        this.sourceGroupElement.appendChild(sliderMarkup);\r\n\r\n        return this.sourceGroupElement.querySelector(sliderRootSelector);\r\n\r\n    }\r\n\r\n}\r\n","export default class ElementSize {\r\n    /**\r\n     *\r\n     * @param element\r\n     * @returns float\r\n     */\r\n    static getOuterWidth(element) {\r\n        var domRect = element.getBoundingClientRect();\r\n        let computedStyle = getComputedStyle(element);\r\n        let marginLeft = parseFloat(computedStyle.marginLeft);\r\n        let marginRight = parseFloat(computedStyle.marginRight);\r\n        return domRect.width + marginLeft + marginRight;\r\n    }\r\n\r\n    /**\r\n     * Tries to find out, how many elements we can fit into the container so\r\n     * they do not wrap.\r\n     *\r\n     * @param containerElement\r\n     * @param element\r\n     * @param numberOfRows\r\n     * @returns {number}\r\n     */\r\n    static calclateNumberOfFittingItemsPerSlide(containerElement, element, numberOfRows) {\r\n\r\n        if (null == element || containerElement == null) {\r\n            return 1;\r\n        }\r\n\r\n        var domRect = containerElement.getBoundingClientRect();\r\n        let numberOfItemsPerSlide = Math.floor(domRect.width / ElementSize.getOuterWidth(element)) * numberOfRows;\r\n\r\n\r\n        if (numberOfItemsPerSlide < 1) {\r\n            numberOfItemsPerSlide = 1 * numberOfRows;\r\n        }\r\n\r\n        return numberOfItemsPerSlide;\r\n    }\r\n}\r\n","export default class CamelCaseConverter {\r\n\r\n    static toCamelCase(str) {\r\n        return str.replace(/-([a-z])/g, function (m, w) {\r\n            return w.toUpperCase();\r\n        });\r\n    }\r\n}\r\n","import {isString, isArray, isNodeList} from \"./units\";\r\n\r\nexport default class EventsHandler {\r\n    /**\r\n     * Construct a EventsHandler instance.\r\n     */\r\n    constructor (listeners = {}) {\r\n        this.listeners = listeners;\r\n    }\r\n\r\n    /**\r\n     * Adds events listeners to arrows HTML elements.\r\n     *\r\n     * @param  {String|Array} events\r\n     * @param  {NodeList|Element|Window|Document} el\r\n     * @param  {Function} closure\r\n     * @param  {boolean} capture\r\n     */\r\n    on (events, el, closure, capture = false) {\r\n        if (isString(events)) {\r\n            events = [events]\r\n        }\r\n\r\n        if (!isNodeList(el) && !isArray(el)) {\r\n            el = [el];\r\n        }\r\n\r\n        events.forEach((event)=> {\r\n            this.listeners[event] = {'closure': closure, 'capture': capture};\r\n\r\n            for (let i=0; i<el.length;i++) {\r\n                el[i].addEventListener(event, this.listeners[event].closure, this.listeners[event].capture)\r\n            }\r\n\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Removes event listeners from arrows HTML elements.\r\n     *\r\n     * @param  {String|Array} events\r\n     * @param  {NodeList|Element|Window|Document} el\r\n     */\r\n    off (events, el) {\r\n        if (isString(events)) {\r\n            events = [events]\r\n        }\r\n\r\n        if (!isNodeList(el) && !isArray(el)) {\r\n            el = [el];\r\n        }\r\n\r\n        events.forEach((event) => {\r\n            for (let i=0; i<el.length;i++) {\r\n                let listener = this.listeners[event];\r\n                if (listener === undefined) {\r\n                    continue;\r\n                }\r\n                el[i].removeEventListener(event, listener.closure, listener.capture)\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Destroy collected listeners.\r\n     *\r\n     */\r\n    destroy () {\r\n        delete this.listeners\r\n    }\r\n}\r\n","\r\n/**\r\n * Indicates whether the specified value is a string.\r\n *\r\n * @param  {*}   value\r\n * @return {Boolean}\r\n */\r\nexport function isString (value) {\r\n    return typeof value === 'string'\r\n}\r\n\r\nexport function isArray(value) {\r\n    return Array.isArray(value);\r\n}\r\n\r\nexport function isNodeList(value) {\r\n    return NodeList.prototype.isPrototypeOf(value);\r\n}\r\n","/*! PhotoSwipe Default UI - 4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\n/**\n*\n* UI on top of main sliding area (caption, arrows, close button, etc.).\n* Built just using public methods/properties of PhotoSwipe.\n* \n*/\nexport default function(pswp, framework) {\n\n\tvar ui = this;\n\tvar _overlayUIUpdated = false,\n\t\t_controlsVisible = true,\n\t\t_fullscrenAPI,\n\t\t_controls,\n\t\t_captionContainer,\n\t\t_fakeCaptionContainer,\n\t\t_indexIndicator,\n\t\t_shareButton,\n\t\t_shareModal,\n\t\t_add2cartButton,\n\t\t_add2cartOverlay,\n\t\t_shareModalHidden = true,\n        _add2cartModalHidden = true,\n\t\t_initalCloseOnScrollValue,\n\t\t_isIdle,\n\t\t_listen,\n\n\t\t_loadingIndicator,\n\t\t_loadingIndicatorHidden,\n\t\t_loadingIndicatorTimeout,\n\n\t\t_galleryHasOneSlide,\n\n\t\t_options,\n\t\t_defaultUIOptions = {\n\t\t\tbarsSize: {top:44, bottom:'auto'},\n\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'], \n\t\t\ttimeToIdle: 4000, \n\t\t\ttimeToIdleOutside: 1000,\n\t\t\tloadingIndicatorDelay: 1000, // 2s\n\t\t\t\n\t\t\taddCaptionHTMLFn: function(item, captionEl /*, isFake */) {\n\t\t\t\tif(!item.title) {\n\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tcloseEl:true,\n\t\t\tcaptionEl: true,\n\t\t\tfullscreenEl: true,\n\t\t\tzoomEl: true,\n\t\t\tshareEl: true,\n\t\t\tdownloadEl: true,\n\t\t\tcounterEl: true,\n\t\t\tarrowEl: true,\n\t\t\tpreloaderEl: true,\n\n\t\t\ttapToClose: false,\n\t\t\ttapToToggleControls: true,\n\n\t\t\tclickToCloseNonZoomable: true,\n\n\t\t\tshareButtons: [\n\t\t\t\t{id:'facebook', label:'Share on Facebook', url:'https://www.facebook.com/sharer/sharer.php?u={{url}}'},\n\t\t\t\t{id:'twitter', label:'Tweet', url:'https://twitter.com/intent/tweet?text={{text}}&url={{url}}'},\n\t\t\t\t{id:'pinterest', label:'Pin it', url:'http://www.pinterest.com/pin/create/button/'+\n\t\t\t\t\t\t\t\t\t\t\t\t\t'?url={{url}}&media={{image_url}}&description={{text}}'},\n\t\t\t\t{id:'download', label:'Download image', url:'{{raw_image_url}}', download:true}\n\t\t\t],\n\t\t\tgetImageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.src || '';\n\t\t\t},\n\t\t\tgetPageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn window.location.href;\n\t\t\t},\n\t\t\tgetTextForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.title || '';\n\t\t\t},\n\t\t\t\t\n\t\t\tindexIndicatorSep: ' / ',\n\t\t\tfitControlsWidth: 1200\n\n\t\t},\n\t\t_blockControlsTap,\n\t\t_blockControlsTapTimeout;\n\n\n\n\tvar _onControlsTap = function(e) {\n\t\t\tif(_blockControlsTap) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\t\t\te = e || window.event;\n\n\t\t\tif(_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n\t\t\t\t// reset idle timer\n\t\t\t\t_onIdleMouseMove();\n\t\t\t}\n\n\n\t\t\tvar target = e.target || e.srcElement,\n\t\t\t\tuiElement,\n\t\t\t\tclickedClass = target.getAttribute('class') || '',\n\t\t\t\tfound;\n\n\t\t\tfor(var i = 0; i < _uiElements.length; i++) {\n\t\t\t\tuiElement = _uiElements[i];\n\t\t\t\tif(uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name ) > -1 ) {\n\t\t\t\t\tuiElement.onTap();\n\t\t\t\t\tfound = true;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(found) {\n\t\t\t\tif(e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\t_blockControlsTap = true;\n\n\t\t\t\t// Some versions of Android don't prevent ghost click event \n\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\n\t\t\t\t// \n\t\t\t\t// This happens on v4.3, 4.2, 4.1, \n\t\t\t\t// older versions strangely work correctly, \n\t\t\t\t// but just in case we add delay on all of them)\t\n\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\n\t\t\t\t_blockControlsTapTimeout = setTimeout(function() {\n\t\t\t\t\t_blockControlsTap = false;\n\t\t\t\t}, tapDelay);\n\t\t\t}\n\n\t\t},\n\t\t_fitControlsInViewport = function() {\n\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\n\t\t},\n\t\t_togglePswpClass = function(el, cName, add) {\n\t\t\tframework[ (add ? 'add' : 'remove') + 'Class' ](el, 'pswp__' + cName);\n\t\t},\n\n\t\t// add class when there is just one item in the gallery\n\t\t// (by default it hides left/right arrows and 1ofX counter)\n\t\t_countNumItems = function() {\n\t\t\tvar hasOneSlide = (_options.getNumItemsFn() === 1);\n\n\t\t\tif(hasOneSlide !== _galleryHasOneSlide) {\n\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n\t\t\t\t_galleryHasOneSlide = hasOneSlide;\n\t\t\t}\n\t\t},\n\t\t_toggleShareModalClass = function() {\n\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n\t\t},\n\t\t_toggleShareModal = function() {\n\n\t\t\t_shareModalHidden = !_shareModalHidden;\n\t\t\t\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModalClass();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(!_shareModalHidden) {\n\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\t\t}\n\t\t\t\t}, 30);\n\t\t\t} else {\n\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(_shareModalHidden) {\n\t\t\t\t\t\t_toggleShareModalClass();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_updateShareURLs();\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n        _toggleAdd2cartModal = function() {\n\n            _add2cartModalHidden = !_add2cartModalHidden;\n\n\n            if(!_add2cartModalHidden) {\n                if(_fullscrenAPI.isFullscreen()) {\n                    _fullscrenAPI.exit();\n                }\n                _add2cartOverlay = new _options.overlayClass();\n                _add2cartOverlay.onClosed = () => {\n\t\t\t\t\tif (!_add2cartModalHidden) {\n\t\t\t\t\t\t_toggleAdd2cartModal();\n\t\t\t\t\t}\n\t\t\t\t}\n\n            } else {\n            \t_add2cartOverlay.closeOverlay();\n            }\n\n            if(!_add2cartModalHidden) {\n                _updateAdd2cartContent();\n            }\n            return false;\n        },\n\n\t\t_openWindowPopup = function(e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tpswp.shout('shareLinkClick', e, target);\n\n\t\t\tif(!target.href) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif( target.hasAttribute('download') ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,'+\n\t\t\t\t\t\t\t\t\t\t'location=yes,width=550,height=420,top=100,left=' + \n\t\t\t\t\t\t\t\t\t\t(window.screen ? Math.round(screen.width / 2 - 275) : 100)  );\n\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t},\n        /**\n         * EVENT GALLERY CUSTOMIZATION\n         * @private\n         */\n\t\t_updateShareURLs = function() {\n\t\t\tlet sharingButtons = pswp.currItem.thumbnailContainer.getElementsByClassName('social-share-button');\n\n\t\t\tif (sharingButtons.length > 0) {\n\t\t\t\tlet sharingButton = sharingButtons[0];\n\n                _shareModal.children[0].innerHTML = '<a><i class=\"egfa egfa-2x egfa-cog egfa-spin\"></i></a>';\n                Eventgallery.jQuery(_shareModal.children[0]).load(sharingButton.getAttribute('data-link'));\n            }\n\n\t\t\t_shareModal.children[0].onclick = (e) => {\n\n                if(!_shareModalHidden) {\n                    _toggleShareModal();\n                }\n\n\t\t\t}\n\t\t},\n        _updateAdd2cartContent = function() {\n            let add2cartButtons = pswp.currItem.thumbnailContainer.getElementsByClassName('eventgallery-add2cart');\n\n            if (add2cartButtons.length > 0) {\n                let add2cartButton = add2cartButtons[0];\n\t\t\t\tlet url = EventGalleryCartConfiguration.add2carturl + '&' + add2cartButton.getAttribute('data-id');\n                _add2cartOverlay.openOverlay(url);\n            }\n\n        },\n\t\t_hasCloseClass = function(target) {\n\t\t\tfor(var  i = 0; i < _options.closeElClasses.length; i++) {\n\t\t\t\tif( framework.hasClass(target, 'pswp__' + _options.closeElClasses[i]) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_idleInterval,\n\t\t_idleTimer,\n\t\t_idleIncrement = 0,\n\t\t_onIdleMouseMove = function() {\n\t\t\tclearTimeout(_idleTimer);\n\t\t\t_idleIncrement = 0;\n\t\t\tif(_isIdle) {\n\t\t\t\tui.setIdle(false);\n\t\t\t}\n\t\t},\n\t\t_onMouseLeaveWindow = function(e) {\n\t\t\te = e ? e : window.event;\n\t\t\tvar from = e.relatedTarget || e.toElement;\n\t\t\tif (!from || from.nodeName === 'HTML') {\n\t\t\t\tclearTimeout(_idleTimer);\n\t\t\t\t_idleTimer = setTimeout(function() {\n\t\t\t\t\tui.setIdle(true);\n\t\t\t\t}, _options.timeToIdleOutside);\n\t\t\t}\n\t\t},\n\t\t_setupFullscreenAPI = function() {\n\t\t\tif(_options.fullscreenEl && !framework.features.isOldAndroid) {\n\t\t\t\tif(!_fullscrenAPI) {\n\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\n\t\t\t\t}\n\t\t\t\tif(_fullscrenAPI) {\n\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tui.updateFullscreen();\n\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t} else {\n\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_setupLoadingIndicator = function() {\n\t\t\t// Setup loading indicator\n\t\t\tif(_options.preloaderEl) {\n\t\t\t\n\t\t\t\t_toggleLoadingIndicator(true);\n\n\t\t\t\t_listen('beforeChange', function() {\n\n\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\n\n\t\t\t\t\t// display loading indicator with delay\n\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function() {\n\n\t\t\t\t\t\tif(pswp.currItem && pswp.currItem.loading) {\n\n\t\t\t\t\t\t\tif( !pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth)  ) {\n\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \n\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false); \n\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, _options.loadingIndicatorDelay);\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t_listen('imageLoadComplete', function(index, item) {\n\t\t\t\t\tif(pswp.currItem === item) {\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t},\n\t\t_toggleLoadingIndicator = function(hide) {\n\t\t\tif( _loadingIndicatorHidden !== hide ) {\n\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n\t\t\t\t_loadingIndicatorHidden = hide;\n\t\t\t}\n\t\t},\n\t\t_applyNavBarGaps = function(item) {\n\t\t\tvar gap = item.vGap;\n\n\t\t\tif( _fitControlsInViewport() ) {\n\t\t\t\t\n\t\t\t\tvar bars = _options.barsSize; \n\t\t\t\tif(_options.captionEl && bars.bottom === 'auto') {\n\t\t\t\t\tif(!_fakeCaptionContainer) {\n\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n\t\t\t\t\t\t_fakeCaptionContainer.appendChild( framework.createEl('pswp__caption__center') );\n\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\n\t\t\t\t\t}\n\t\t\t\t\tif( _options.addCaptionHTMLFn(item, _fakeCaptionContainer, true) ) {\n\n\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\n\t\t\t\t\t\tgap.bottom = parseInt(captionSize,10) || 44;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// height of top bar is static, no need to calculate it\n\t\t\t\tgap.top = bars.top;\n\t\t\t} else {\n\t\t\t\tgap.top = gap.bottom = 0;\n\t\t\t}\n\t\t},\n\t\t_setupIdle = function() {\n\t\t\t// Hide controls when mouse is used\n\t\t\tif(_options.timeToIdle) {\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\t\n\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n\t\t\t\t\t_idleInterval = setInterval(function() {\n\t\t\t\t\t\t_idleIncrement++;\n\t\t\t\t\t\tif(_idleIncrement === 2) {\n\t\t\t\t\t\t\tui.setIdle(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.timeToIdle / 2);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t_setupHidingControlsDuringGestures = function() {\n\n\t\t\t// Hide controls on vertical drag\n\t\t\t_listen('onVerticalDrag', function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.95) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else if(!_controlsVisible && now >= 0.95) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Hide controls when pinching to close\n\t\t\tvar pinchControlsHidden;\n\t\t\t_listen('onPinchClose' , function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.9) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t\tpinchControlsHidden = true;\n\t\t\t\t} else if(pinchControlsHidden && !_controlsVisible && now > 0.9) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('zoomGestureEnded', function() {\n\t\t\t\tpinchControlsHidden = false;\n\t\t\t\tif(pinchControlsHidden && !_controlsVisible) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t};\n\n\n\n\tvar _uiElements = [\n\t\t{ \n\t\t\tname: 'caption', \n\t\t\toption: 'captionEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_captionContainer = el; \n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'share-modal', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_shareModal = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--share', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareButton = el;\n\t\t\t},\n\t\t\tonTap: function() {\n                pswp.shout('userInteractionHappened');\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{\n\t\t\tname: 'button--download',\n\t\t\toption: 'downloadEl',\n\t\t\tonTap: function() {\n\t\t\t\tpswp.shout('userInteractionHappened');\n\t\t\t\tlet downloadButtons = pswp.currItem.thumbnailContainer.getElementsByClassName('eg-download');\n\t\t\t\tif (downloadButtons.length>0) {\n\t\t\t\t\tdownloadButtons[0].click()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ \n            name: 'button--add2cart',\n            option: 'add2cartEl',\n            onInit: function(el) {\n                _add2cartButton = el;\n            },\n            onTap: function() {\n                pswp.shout('userInteractionHappened');\n                _toggleAdd2cartModal();\n            }\n        },\n\t\t{\n\t\t\tname: 'button--zoom',\n\t\t\toption: 'zoomEl',\n\t\t\tonTap: () => {\n                pswp.shout('userInteractionHappened');\n                pswp.toggleDesktopZoom()\n            }\n\t\t},\n\t\t{ \n\t\t\tname: 'counter', \n\t\t\toption: 'counterEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_indexIndicator = el;\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--close', \n\t\t\toption: 'closeEl',\n\t\t\tonTap: pswp.close\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--left', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: () => {\n                pswp.shout('userInteractionHappened');\n\t\t\t\tpswp.prev()\n\t\t\t}\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--right', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: () => {\n                pswp.shout('userInteractionHappened');\n\t\t\t\tpswp.next();\n            }\n\t\t},\n\t\t{ \n\t\t\tname: 'button--fs', \n\t\t\toption: 'fullscreenEl',\n\t\t\tonTap: function() {  \n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t} else {\n\t\t\t\t\t_fullscrenAPI.enter();\n\t\t\t\t}\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'preloader', \n\t\t\toption: 'preloaderEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_loadingIndicator = el;\n\t\t\t} \n\t\t}\n\n\t];\n\n\tvar _setupUIElements = function() {\n\t\tvar item,\n\t\t\tclassAttr,\n\t\t\tuiElement;\n\n\t\tvar loopThroughChildElements = function(sChildren) {\n\t\t\tif(!sChildren) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar l = sChildren.length;\n\t\t\tfor(var i = 0; i < l; i++) {\n\t\t\t\titem = sChildren[i];\n\t\t\t\tclassAttr = item.className;\n\n\t\t\t\tfor(var a = 0; a < _uiElements.length; a++) {\n\t\t\t\t\tuiElement = _uiElements[a];\n\n\t\t\t\t\tif(classAttr.indexOf('pswp__' + uiElement.name) > -1  ) {\n\n\t\t\t\t\t\tif( _options[uiElement.option] ) { // if element is not disabled from options\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\tif(uiElement.onInit) {\n\t\t\t\t\t\t\t\tuiElement.onInit(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//item.style.display = 'block';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t//item.style.display = 'none';\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\tloopThroughChildElements(_controls.children);\n\n\t\tvar topBar =  framework.getChildByClass(_controls, 'pswp__top-bar');\n\t\tif(topBar) {\n\t\t\tloopThroughChildElements( topBar.children );\n\t\t}\n\t};\n\n\n\t\n\n\tui.init = function() {\n\n\t\t// extend options\n\t\tframework.extend(pswp.options, _defaultUIOptions, true);\n\n\t\t// create local link for fast access\n\t\t_options = pswp.options;\n\n\t\t// find pswp__ui element\n\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n\t\t// create local link\n\t\t_listen = pswp.listen;\n\n\n\t\t_setupHidingControlsDuringGestures();\n\n\t\t// update controls when slides change\n\t\t_listen('beforeChange', ui.update);\n\n\t\t// toggle zoom on double-tap\n\t\t_listen('doubleTap', function(point) {\n\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\n\t\t\tif(pswp.getZoomLevel() !== initialZoomLevel) {\n\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\n\t\t\t} else {\n\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n\t\t\t}\n\t\t});\n\n\t\t// Allow text selection in caption\n\t\t_listen('preventDragEvent', function(e, isDown, preventObj) {\n\t\t\tvar t = e.target || e.srcElement;\n\t\t\tif(\n\t\t\t\tt && \n\t\t\t\tt.getAttribute('class') && e.type.indexOf('mouse') > -1 && \n\t\t\t\t( t.getAttribute('class').indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName) ) \n\t\t\t) {\n\t\t\t\tpreventObj.prevent = false;\n\t\t\t}\n\t\t});\n\n\t\t// bind events for UI\n\t\t_listen('bindEvents', function() {\n\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n\t\t\tif(!pswp.likelyTouchDevice) {\n\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\t\t\t}\n\t\t});\n\n\t\t// unbind events for UI\n\t\t_listen('unbindEvents', function() {\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n            if(!_add2cartModalHidden) {\n                _toggleAdd2cartModal();\n            }\n\n\t\t\tif(_idleInterval) {\n\t\t\t\tclearInterval(_idleInterval);\n\t\t\t}\n\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\n\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n\t\t\tif(_fullscrenAPI) {\n\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_options.hideAnimationDuration = 0;\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t}\n\t\t\t\t_fullscrenAPI = null;\n\t\t\t}\n\t\t});\n\n\n\t\t// clean up things when gallery is destroyed\n\t\t_listen('destroy', function() {\n\t\t\tif(_options.captionEl) {\n\t\t\t\tif(_fakeCaptionContainer) {\n\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\n\t\t\t\t}\n\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\n\t\t\t}\n\n\t\t\tif(_shareModal) {\n\t\t\t\t_shareModal.children[0].onclick = null;\n\t\t\t}\n\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t\tui.setIdle(false);\n\t\t});\n\t\t\n\n\t\tif(!_options.showAnimationDuration) {\n\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t}\n\t\t_listen('initialZoomIn', function() {\n\t\t\tif(_options.showAnimationDuration) {\n\t\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t\t}\n\t\t});\n\t\t_listen('initialZoomOut', function() {\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t});\n\n\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\n\t\t\n\t\t_setupUIElements();\n\n\t\tif(_options.shareEl && _shareButton && _shareModal) {\n\t\t\t_shareModalHidden = true;\n\t\t}\n\n        if(_options.add2cartEl && _add2cartButton) {\n            _add2cartModalHidden = true;\n        }\n\n\t\t_countNumItems();\n\n\t\t_setupIdle();\n\n\t\t_setupFullscreenAPI();\n\n\t\t_setupLoadingIndicator();\n\t};\n\n\tui.setIdle = function(isIdle) {\n\t\t_isIdle = isIdle;\n\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\n\t};\n\n\tui.update = function() {\n\t\t// Don't update UI if it's hidden\n\t\tif(_controlsVisible && pswp.currItem) {\n\t\t\t\n\t\t\tui.updateIndexIndicator();\n\n\t\t\tif(_options.captionEl) {\n\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n\t\t\t}\n\n\t\t\t_overlayUIUpdated = true;\n\n\t\t} else {\n\t\t\t_overlayUIUpdated = false;\n\t\t}\n\n\t\tif(!_shareModalHidden) {\n\t\t\t_toggleShareModal();\n\t\t}\n\n        if(!_add2cartModalHidden) {\n            _toggleAdd2cartModal();\n        }\n\n\t\t_countNumItems();\n\t};\n\n\tui.updateFullscreen = function(e) {\n\n\t\tif(e) {\n\t\t\t// some browsers change window scroll position during the fullscreen\n\t\t\t// so PhotoSwipe updates it just in case\n\t\t\tsetTimeout(function() {\n\t\t\t\tpswp.setScrollOffset( 0, framework.getScrollY() );\n\t\t\t}, 50);\n\t\t}\n\t\t\n\t\t// toogle pswp--fs class on root element\n\t\tframework[ (_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class' ](pswp.template, 'pswp--fs');\n\t};\n\n\tui.updateIndexIndicator = function() {\n\t\tif(_options.counterEl) {\n\t\t\t_indexIndicator.innerHTML = (pswp.getCurrentIndex()+1) + \n\t\t\t\t\t\t\t\t\t\t_options.indexIndicatorSep + \n\t\t\t\t\t\t\t\t\t\t_options.getNumItemsFn();\n\t\t}\n\t};\n\t\n\tui.onGlobalTap = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(_blockControlsTap) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(e.detail && e.detail.pointerType === 'mouse') {\n\n\t\t\t// close gallery if clicked outside of the image\n\t\t\tif(_hasCloseClass(target)) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(framework.hasClass(target, 'pswp__img')) {\n\t\t\t\tif(pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n\t\t\t\t\tif(_options.clickToCloseNonZoomable) {\n\t\t\t\t\t\tpswp.close();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t} else {\n\n\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\n\t\t\tif(_options.tapToToggleControls) {\n\t\t\t\tif(_controlsVisible) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tap to close gallery\n\t\t\tif(_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target)) ) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t}\n\t};\n\tui.onMouseOver = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\t// add class when mouse is over an element that should close the gallery\n\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n\t};\n\n\tui.hideControls = function() {\n\t\tframework.addClass(_controls,'pswp__ui--hidden');\n\t\t_controlsVisible = false;\n\t};\n\n\tui.showControls = function() {\n\t\t_controlsVisible = true;\n\t\tif(!_overlayUIUpdated) {\n\t\t\tui.update();\n\t\t}\n\t\tframework.removeClass(_controls,'pswp__ui--hidden');\n\t};\n\n\tui.supportsFullscreen = function() {\n\t\tvar d = document;\n\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n\t};\n\n\tui.getFullscreenAPI = function() {\n\t\tvar dE = document.documentElement,\n\t\t\tapi,\n\t\t\ttF = 'fullscreenchange';\n\n\t\tif (dE.requestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'requestFullscreen',\n\t\t\t\texitK: 'exitFullscreen',\n\t\t\t\telementK: 'fullscreenElement',\n\t\t\t\teventK: tF\n\t\t\t};\n\n\t\t} else if(dE.mozRequestFullScreen ) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'mozRequestFullScreen',\n\t\t\t\texitK: 'mozCancelFullScreen',\n\t\t\t\telementK: 'mozFullScreenElement',\n\t\t\t\teventK: 'moz' + tF\n\t\t\t};\n\n\t\t\t\n\n\t\t} else if(dE.webkitRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'webkitRequestFullscreen',\n\t\t\t\texitK: 'webkitExitFullscreen',\n\t\t\t\telementK: 'webkitFullscreenElement',\n\t\t\t\teventK: 'webkit' + tF\n\t\t\t};\n\n\t\t} else if(dE.msRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'msRequestFullscreen',\n\t\t\t\texitK: 'msExitFullscreen',\n\t\t\t\telementK: 'msFullscreenElement',\n\t\t\t\teventK: 'MSFullscreenChange'\n\t\t\t};\n\t\t}\n\n\t\tif(api) {\n\t\t\tapi.enter = function() { \n\t\t\t\t// disable close-on-scroll in fullscreen\n\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll; \n\t\t\t\t_options.closeOnScroll = false; \n\n\t\t\t\tif(this.enterK === 'webkitRequestFullscreen') {\n\t\t\t\t\tpswp.template[this.enterK]( Element.ALLOW_KEYBOARD_INPUT );\n\t\t\t\t} else {\n\t\t\t\t\treturn pswp.template[this.enterK](); \n\t\t\t\t}\n\t\t\t};\n\t\t\tapi.exit = function() { \n\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\n\n\t\t\t\treturn document[this.exitK](); \n\n\t\t\t};\n\t\t\tapi.isFullscreen = function() { return document[this.elementK]; };\n\t\t}\n\n\t\treturn api;\n\t};\n\n\n\n};\n","/*! PhotoSwipe - v4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\nexport default function(template, UiClass, items, options){\n\n/*>>framework-bridge*/\n/**\n *\n * Set of generic functions used by gallery.\n * \n * You're free to modify anything here as long as functionality is kept.\n * \n */\nvar framework = {\n\tfeatures: null,\n\tbind: function(target, type, listener, unbind) {\n\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n\t\ttype = type.split(' ');\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tif(type[i]) {\n\t\t\t\ttarget[methodName]( type[i], listener, false);\n\t\t\t}\n\t\t}\n\t},\n\tisArray: function(obj) {\n\t\treturn (obj instanceof Array);\n\t},\n\tcreateEl: function(classes, tag) {\n\t\tvar el = document.createElement(tag || 'div');\n\t\tif(classes) {\n\t\t\tel.className = classes;\n\t\t}\n\t\treturn el;\n\t},\n\tgetScrollY: function() {\n\t\tvar yOffset = window.pageYOffset;\n\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n\t},\n\tunbind: function(target, type, listener) {\n\t\tframework.bind(target,type,listener,true);\n\t},\n\tremoveClass: function(el, className) {\n\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); \n\t},\n\taddClass: function(el, className) {\n\t\tif( !framework.hasClass(el,className) ) {\n\t\t\tel.className += (el.className ? ' ' : '') + className;\n\t\t}\n\t},\n\thasClass: function(el, className) {\n\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n\t},\n\tgetChildByClass: function(parentEl, childClassName) {\n\t\tvar node = parentEl.firstChild;\n\t\twhile(node) {\n\t\t\tif( framework.hasClass(node, childClassName) ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t},\n\tarraySearch: function(array, value, key) {\n\t\tvar i = array.length;\n\t\twhile(i--) {\n\t\t\tif(array[i][key] === value) {\n\t\t\t\treturn i;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t},\n\textend: function(o1, o2, preventOverwrite) {\n\t\tfor (var prop in o2) {\n\t\t\tif (o2.hasOwnProperty(prop)) {\n\t\t\t\tif(preventOverwrite && o1.hasOwnProperty(prop)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\to1[prop] = o2[prop];\n\t\t\t}\n\t\t}\n\t},\n\teasing: {\n\t\tsine: {\n\t\t\tout: function(k) {\n\t\t\t\treturn Math.sin(k * (Math.PI / 2));\n\t\t\t},\n\t\t\tinOut: function(k) {\n\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\n\t\t\t}\n\t\t},\n\t\tcubic: {\n\t\t\tout: function(k) {\n\t\t\t\treturn --k * k * k + 1;\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n\t},\n\n\t/**\n\t * \n\t * @return {object}\n\t * \n\t * {\n\t *  raf : request animation frame function\n\t *  caf : cancel animation frame function\n\t *  transfrom : transform property key (with vendor), or null if not supported\n\t *  oldIE : IE8 or below\n\t * }\n\t * \n\t */\n\tdetectFeatures: function() {\n\t\tif(framework.features) {\n\t\t\treturn framework.features;\n\t\t}\n\t\tvar helperEl = framework.createEl(),\n\t\t\thelperStyle = helperEl.style,\n\t\t\tvendor = '',\n\t\t\tfeatures = {};\n\n\t\t// IE8 and below\n\t\tfeatures.oldIE = document.all && !document.addEventListener;\n\n\t\tfeatures.touch = 'ontouchstart' in window;\n\n\t\tif(window.requestAnimationFrame) {\n\t\t\tfeatures.raf = window.requestAnimationFrame;\n\t\t\tfeatures.caf = window.cancelAnimationFrame;\n\t\t}\n\n\t\tfeatures.pointerEvent = !!(window.PointerEvent) || navigator.msPointerEnabled;\n\n\t\t// fix false-positive detection of old Android in new IE\n\t\t// (IE11 ua string contains \"Android 4.0\")\n\t\t\n\t\tif(!features.pointerEvent) { \n\n\t\t\tvar ua = navigator.userAgent;\n\n\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\n\t\t\t// http://stackoverflow.com/a/14223920\n\t\t\t// \n\t\t\t// This detection is made because of buggy top/bottom toolbars\n\t\t\t// that don't trigger window.resize event.\n\t\t\t// For more info refer to _isFixedPosition variable in core.js\n\n\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\n\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\t\t\tif(v && v.length > 0) {\n\t\t\t\t\tv = parseInt(v[1], 10);\n\t\t\t\t\tif(v >= 1 && v < 8 ) {\n\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect old Android (before KitKat)\n\t\t\t// due to bugs related to position:fixed\n\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\t\t\t\n\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\n\t\t\tvar androidversion =  match ? match[1] : 0;\n\t\t\tandroidversion = parseFloat(androidversion);\n\t\t\tif(androidversion >= 1 ) {\n\t\t\t\tif(androidversion < 4.4) {\n\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\n\t\t\t\t}\n\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\n\t\t\t}\t\n\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n\t\t}\n\t\t\n\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\n\t\t\tvendors = ['', 'webkit','Moz','ms','O'],\n\t\t\tstyleCheckItem,\n\t\t\tstyleName;\n\n\t\tfor(var i = 0; i < 4; i++) {\n\t\t\tvendor = vendors[i];\n\n\t\t\tfor(var a = 0; a < 3; a++) {\n\t\t\t\tstyleCheckItem = styleChecks[a];\n\n\t\t\t\t// uppercase first letter of property name, if vendor is present\n\t\t\t\tstyleName = vendor + (vendor ? \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) : \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem);\n\t\t\t\n\t\t\t\tif(!features[styleCheckItem] && styleName in helperStyle ) {\n\t\t\t\t\tfeatures[styleCheckItem] = styleName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(vendor && !features.raf) {\n\t\t\t\tvendor = vendor.toLowerCase();\n\t\t\t\tfeatures.raf = window[vendor+'RequestAnimationFrame'];\n\t\t\t\tif(features.raf) {\n\t\t\t\t\tfeatures.caf = window[vendor+'CancelAnimationFrame'] || \n\t\t\t\t\t\t\t\t\twindow[vendor+'CancelRequestAnimationFrame'];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(!features.raf) {\n\t\t\tvar lastTime = 0;\n\t\t\tfeatures.raf = function(fn) {\n\t\t\t\tvar currTime = new Date().getTime();\n\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\t\t\tvar id = window.setTimeout(function() { fn(currTime + timeToCall); }, timeToCall);\n\t\t\t\tlastTime = currTime + timeToCall;\n\t\t\t\treturn id;\n\t\t\t};\n\t\t\tfeatures.caf = function(id) { clearTimeout(id); };\n\t\t}\n\n\t\t// Detect SVG support\n\t\tfeatures.svg = !!document.createElementNS && \n\t\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n\t\tframework.features = features;\n\n\t\treturn features;\n\t}\n};\n\nframework.detectFeatures();\n\n// Override addEventListener for old versions of IE\nif(framework.features.oldIE) {\n\n\tframework.bind = function(target, type, listener, unbind) {\n\t\t\n\t\ttype = type.split(' ');\n\n\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\n\t\t\tevName,\n\t\t\t_handleEv = function() {\n\t\t\t\tlistener.handleEvent.call(listener);\n\t\t\t};\n\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tevName = type[i];\n\t\t\tif(evName) {\n\n\t\t\t\tif(typeof listener === 'object' && listener.handleEvent) {\n\t\t\t\t\tif(!unbind) {\n\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!listener['oldIE' + evName]) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener['oldIE' + evName]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t};\n\t\n}\n\n/*>>framework-bridge*/\n\n/*>>core*/\n//function(template, UiClass, items, options)\n\nvar self = this;\n\n/**\n * Static vars, don't change unless you know what you're doing.\n */\nvar DOUBLE_TAP_RADIUS = 25, \n\tNUM_HOLDERS = 3;\n\n/**\n * Options\n */\nvar _options = {\n\tallowPanToNext:true,\n\tspacing: 0.12,\n\tbgOpacity: 1,\n\tmouseUsed: false,\n\tloop: true,\n\tpinchToClose: true,\n\tcloseOnScroll: true,\n\tcloseOnVerticalDrag: true,\n\tverticalDragRange: 0.75,\n\thideAnimationDuration: 333,\n\tshowAnimationDuration: 333,\n\tshowHideOpacity: false,\n\tfocus: true,\n\tescKey: true,\n\tarrowKeys: true,\n\tmainScrollEndFriction: 0.35,\n\tpanEndFriction: 0.35,\n\tisClickableElement: function(el) {\n        return el.tagName === 'A';\n    },\n    getDoubleTapZoom: function(isMouseClick, item) {\n    \tif(isMouseClick) {\n    \t\treturn 1;\n    \t} else {\n    \t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\n    \t}\n    },\n    maxSpreadZoom: 1.33,\n\tmodal: true,\n\n\t// not fully implemented yet\n\tscaleMode: 'fit' // TODO\n};\nframework.extend(_options, options);\n\n\n/**\n * Private helper variables & functions\n */\n\nvar _getEmptyPoint = function() { \n\t\treturn {x:0,y:0}; \n\t};\n\nvar _isOpen,\n\t_isDestroying,\n\t_closedByScroll,\n\t_currentItemIndex,\n\t_containerStyle,\n\t_containerShiftIndex,\n\t_currPanDist = _getEmptyPoint(),\n\t_startPanOffset = _getEmptyPoint(),\n\t_panOffset = _getEmptyPoint(),\n\t_upMoveEvents, // drag move, drag end & drag cancel events array\n\t_downEvents, // drag start events array\n\t_globalEventHandlers,\n\t_viewportSize = {},\n\t_currZoomLevel,\n\t_startZoomLevel,\n\t_translatePrefix,\n\t_translateSufix,\n\t_updateSizeInterval,\n\t_itemsNeedUpdate,\n\t_currPositionIndex = 0,\n\t_offset = {},\n\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\n\t_itemHolders,\n\t_prevItemIndex,\n\t_indexDiff = 0, // difference of indexes since last content update\n\t_dragStartEvent,\n\t_dragMoveEvent,\n\t_dragEndEvent,\n\t_dragCancelEvent,\n\t_transformKey,\n\t_pointerEventEnabled,\n\t_isFixedPosition = true,\n\t_likelyTouchDevice,\n\t_modules = [],\n\t_requestAF,\n\t_cancelAF,\n\t_initalClassName,\n\t_initalWindowScrollY,\n\t_oldIE,\n\t_currentWindowScrollY,\n\t_features,\n\t_windowVisibleSize = {},\n\t_renderMaxResolution = false,\n\t_orientationChangeTimeout,\n\n\n\t// Registers PhotoSWipe module (History, Controller ...)\n\t_registerModule = function(name, module) {\n\t\tframework.extend(self, module.publicMethods);\n\t\t_modules.push(name);\n\t},\n\n\t_getLoopedId = function(index) {\n\t\tvar numSlides = _getNumItems();\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t\n\t// Micro bind/trigger\n\t_listeners = {},\n\t_listen = function(name, fn) {\n\t\tif(!_listeners[name]) {\n\t\t\t_listeners[name] = [];\n\t\t}\n\t\treturn _listeners[name].push(fn);\n\t},\n\t_shout = function(name) {\n\t\tvar listeners = _listeners[name];\n\n\t\tif(listeners) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\targs.shift();\n\n\t\t\tfor(var i = 0; i < listeners.length; i++) {\n\t\t\t\tlisteners[i].apply(self, args);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getCurrentTime = function() {\n\t\treturn new Date().getTime();\n\t},\n\t_applyBgOpacity = function(opacity) {\n\t\t_bgOpacity = opacity;\n\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\n\t},\n\n\t_applyZoomTransform = function(styleObj,x,y,zoom,item) {\n\t\tif(!_renderMaxResolution || (item && item !== self.currItem) ) {\n\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\t\n\t\t}\n\t\t\t\n\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n\t},\n\t_applyCurrentZoomPan = function( allowRenderResolution ) {\n\t\tif(_currZoomElementStyle) {\n\n\t\t\tif(allowRenderResolution) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\tif(!_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\n\t\t\t\t\t\t_renderMaxResolution = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem);\n\t\t\t\t\t\t_renderMaxResolution = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n\t\t}\n\t},\n\t_applyZoomPanToItem = function(item) {\n\t\tif(item.container) {\n\n\t\t\t_applyZoomTransform(item.container.style, \n\t\t\t\t\t\t\t\titem.initialPosition.x, \n\t\t\t\t\t\t\t\titem.initialPosition.y, \n\t\t\t\t\t\t\t\titem.initialZoomLevel,\n\t\t\t\t\t\t\t\titem);\n\t\t}\n\t},\n\t_setTranslateX = function(x, elStyle) {\n\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n\t},\n\t_moveMainScroll = function(x, dragging) {\n\n\t\tif(!_options.loop && dragging) {\n\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\n\n\t\t\tif( (newSlideIndexOffset < 0 && delta > 0) || \n\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {\n\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n\t\t\t} \n\t\t}\n\t\t\n\t\t_mainScrollPos.x = x;\n\t\t_setTranslateX(x, _containerStyle);\n\t},\n\t_calculatePanOffset = function(axis, zoomLevel) {\n\t\tvar m = _midZoomPoint[axis] - _offset[axis];\n\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * ( zoomLevel / _startZoomLevel );\n\t},\n\t\n\t_equalizePoints = function(p1, p2) {\n\t\tp1.x = p2.x;\n\t\tp1.y = p2.y;\n\t\tif(p2.id) {\n\t\t\tp1.id = p2.id;\n\t\t}\n\t},\n\t_roundPoint = function(p) {\n\t\tp.x = Math.round(p.x);\n\t\tp.y = Math.round(p.y);\n\t},\n\n\t_mouseMoveTimeout = null,\n\t_onFirstMouseMove = function() {\n\t\t// Wait until mouse move event is fired at least twice during 100ms\n\t\t// We do this, because some mobile browsers trigger it on touchstart\n\t\tif(_mouseMoveTimeout ) { \n\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\t\t\tframework.addClass(template, 'pswp--has_mouse');\n\t\t\t_options.mouseUsed = true;\n\t\t\t_shout('mouseUsed');\n\t\t}\n\t\t_mouseMoveTimeout = setTimeout(function() {\n\t\t\t_mouseMoveTimeout = null;\n\t\t}, 100);\n\t},\n\n\t_bindEvents = function() {\n\t\tframework.bind(document, 'keydown', self);\n\n\t\tif(_features.transform) {\n\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\n\t\t\tframework.bind(self.scrollWrap, 'click', self);\n\t\t}\n\t\t\n\n\t\tif(!_options.mouseUsed) {\n\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\n\t\t}\n\n\t\tframework.bind(window, 'resize scroll orientationchange', self);\n\n\t\t_shout('bindEvents');\n\t},\n\n\t_unbindEvents = function() {\n\t\tframework.unbind(window, 'resize scroll orientationchange', self);\n\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n\t\tframework.unbind(document, 'keydown', self);\n\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n\t\tif(_features.transform) {\n\t\t\tframework.unbind(self.scrollWrap, 'click', self);\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\t\t}\n\n\t\tclearTimeout(_orientationChangeTimeout);\n\n\t\t_shout('unbindEvents');\n\t},\n\t\n\t_calculatePanBounds = function(zoomLevel, update) {\n\t\tvar bounds = _calculateItemSize( self.currItem, _viewportSize, zoomLevel );\n\t\tif(update) {\n\t\t\t_currPanBounds = bounds;\n\t\t}\n\t\treturn bounds;\n\t},\n\t\n\t_getMinZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.initialZoomLevel;\n\t},\n\t_getMaxZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\n\t},\n\n\t// Return true if offset is out of the bounds\n\t_modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel) {\n\t\tif(destZoomLevel === self.currItem.initialZoomLevel) {\n\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\n\t\t\treturn true;\n\t\t} else {\n\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel); \n\n\t\t\tif(destPanOffset[axis] > destPanBounds.min[axis]) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\n\t\t\t\treturn true;\n\t\t\t} else if(destPanOffset[axis] < destPanBounds.max[axis] ) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t_setupTransforms = function() {\n\n\t\tif(_transformKey) {\n\t\t\t// setup 3d transforms\n\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\n\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\t\n\t\t\treturn;\n\t\t}\n\n\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\n\t\t// (so they use left/top/width/height, instead of CSS transform)\n\t\n\t\t_transformKey = 'left';\n\t\tframework.addClass(template, 'pswp--ie');\n\n\t\t_setTranslateX = function(x, elStyle) {\n\t\t\telStyle.left = x + 'px';\n\t\t};\n\t\t_applyZoomPanToItem = function(item) {\n\n\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\ts = item.container.style,\n\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\th = zoomRatio * item.h;\n\n\t\t\ts.width = w + 'px';\n\t\t\ts.height = h + 'px';\n\t\t\ts.left = item.initialPosition.x + 'px';\n\t\t\ts.top = item.initialPosition.y + 'px';\n\n\t\t};\n\t\t_applyCurrentZoomPan = function() {\n\t\t\tif(_currZoomElementStyle) {\n\n\t\t\t\tvar s = _currZoomElementStyle,\n\t\t\t\t\titem = self.currItem,\n\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\t\th = zoomRatio * item.h;\n\n\t\t\t\ts.width = w + 'px';\n\t\t\t\ts.height = h + 'px';\n\n\n\t\t\t\ts.left = _panOffset.x + 'px';\n\t\t\t\ts.top = _panOffset.y + 'px';\n\t\t\t}\n\t\t\t\n\t\t};\n\t},\n\n\t_onKeyDown = function(e) {\n\t\tvar keydownAction = '';\n\t\tif(_options.escKey && e.keyCode === 27) { \n\t\t\tkeydownAction = 'close';\n\t\t} else if(_options.arrowKeys) {\n\t\t\tif(e.keyCode === 37) {\n\t\t\t\tkeydownAction = 'prev';\n\t\t\t} else if(e.keyCode === 39) { \n\t\t\t\tkeydownAction = 'next';\n\t\t\t}\n\t\t}\n\n\t\tif(keydownAction) {\n\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\n\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n\t\t\tif( !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey ) {\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\te.returnValue = false;\n\t\t\t\t} \n\t\t\t\tself[keydownAction]();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onGlobalClick = function(e) {\n\t\tif(!e) {\n\t\t\treturn;\n\t\t}\n\n\t\t// don't allow click event to pass through when triggering after drag or some other gesture\n\t\tif(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\n\t_updatePageScrollOffset = function() {\n\t\tself.setScrollOffset(0, framework.getScrollY());\t\t\n\t};\n\t\n\n\n\t\n\n\n\n// Micro animation engine\nvar _animations = {},\n\t_numAnimations = 0,\n\t_stopAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\tif(_animations[name].raf) {\n\t\t\t\t_cancelAF( _animations[name].raf );\n\t\t\t}\n\t\t\t_numAnimations--;\n\t\t\tdelete _animations[name];\n\t\t}\n\t},\n\t_registerStartAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\t_stopAnimation(name);\n\t\t}\n\t\tif(!_animations[name]) {\n\t\t\t_numAnimations++;\n\t\t\t_animations[name] = {};\n\t\t}\n\t},\n\t_stopAllAnimations = function() {\n\t\tfor (var prop in _animations) {\n\n\t\t\tif( _animations.hasOwnProperty( prop ) ) {\n\t\t\t\t_stopAnimation(prop);\n\t\t\t} \n\t\t\t\n\t\t}\n\t},\n\t_animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete) {\n\t\tvar startAnimTime = _getCurrentTime(), t;\n\t\t_registerStartAnimation(name);\n\n\t\tvar animloop = function(){\n\t\t\tif ( _animations[name] ) {\n\t\t\t\t\n\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\n\t\t\t\t//b - beginning (start prop)\n\t\t\t\t//d - anim duration\n\n\t\t\t\tif ( t >= d ) {\n\t\t\t\t\t_stopAnimation(name);\n\t\t\t\t\tonUpdate(endProp);\n\t\t\t\t\tif(onComplete) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdate( (endProp - b) * easingFn(t/d) + b );\n\n\t\t\t\t_animations[name].raf = _requestAF(animloop);\n\t\t\t}\n\t\t};\n\t\tanimloop();\n\t};\n\t\n\n\nvar publicMethods = {\n\n\t// make a few local variables and functions public\n\tshout: _shout,\n\tlisten: _listen,\n\tviewportSize: _viewportSize,\n\toptions: _options,\n\n\tisMainScrollAnimating: function() {\n\t\treturn _mainScrollAnimating;\n\t},\n\tgetZoomLevel: function() {\n\t\treturn _currZoomLevel;\n\t},\n\tgetCurrentIndex: function() {\n\t\treturn _currentItemIndex;\n\t},\n\tisDragging: function() {\n\t\treturn _isDragging;\n\t},\t\n\tisZooming: function() {\n\t\treturn _isZooming;\n\t},\n\tsetScrollOffset: function(x,y) {\n\t\t_offset.x = x;\n\t\t_currentWindowScrollY = _offset.y = y;\n\t\t_shout('updateScrollOffset', _offset);\n\t},\n\tapplyZoomPan: function(zoomLevel,panX,panY,allowRenderResolution) {\n\t\t_panOffset.x = panX;\n\t\t_panOffset.y = panY;\n\t\t_currZoomLevel = zoomLevel;\n\t\t_applyCurrentZoomPan( allowRenderResolution );\n\t},\n\n\tinit: function() {\n\n\t\tif(_isOpen || _isDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i;\n\n\t\tself.framework = framework; // basic functionality\n\t\tself.template = template; // root DOM element of PhotoSwipe\n\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\n\n\t\t_initalClassName = template.className;\n\t\t_isOpen = true;\n\t\t\t\t\n\t\t_features = framework.detectFeatures();\n\t\t_requestAF = _features.raf;\n\t\t_cancelAF = _features.caf;\n\t\t_transformKey = _features.transform;\n\t\t_oldIE = _features.oldIE;\n\t\t\n\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n\t\t_containerStyle = self.container.style; // for fast access\n\n\t\t// Objects that hold slides (there are only 3 in DOM)\n\t\tself.itemHolders = _itemHolders = [\n\t\t\t{el:self.container.children[0] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[1] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[2] , wrap:0, index: -1}\n\t\t];\n\n\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n\t\t_setupTransforms();\n\n\t\t// Setup global events\n\t\t_globalEventHandlers = {\n\t\t\tresize: self.updateSize,\n\n\t\t\t// Fixes: iOS 10.3 resize event\n\t\t\t// does not update scrollWrap.clientWidth instantly after resize\n\t\t\t// https://github.com/dimsemenov/PhotoSwipe/issues/1315\n\t\t\torientationchange: function() {\n\t\t\t\tclearTimeout(_orientationChangeTimeout);\n\t\t\t\t_orientationChangeTimeout = setTimeout(function() {\n\t\t\t\t\tif(_viewportSize.x !== self.scrollWrap.clientWidth) {\n\t\t\t\t\t\tself.updateSize();\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t},\n\t\t\tscroll: _updatePageScrollOffset,\n\t\t\tkeydown: _onKeyDown,\n\t\t\tclick: _onGlobalClick\n\t\t};\n\n\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \n\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n\t\tif(!_features.animationName || !_features.transform || oldPhone) {\n\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\n\t\t}\n\n\t\t// init modules\n\t\tfor(i = 0; i < _modules.length; i++) {\n\t\t\tself['init' + _modules[i]]();\n\t\t}\n\t\t\n\t\t// init\n\t\tif(UiClass) {\n\t\t\tvar ui = self.ui = new UiClass(self, framework);\n\t\t\tui.init();\n\t\t}\n\n\t\t_shout('firstUpdate');\n\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\n\t\t// validate index\n\t\tif( isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems() ) {\n\t\t\t_currentItemIndex = 0;\n\t\t}\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\n\t\t\n\t\tif(_features.isOldIOSPhone || _features.isOldAndroid) {\n\t\t\t_isFixedPosition = false;\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'false');\n\t\tif(_options.modal) {\n\t\t\tif(!_isFixedPosition) {\n\t\t\t\ttemplate.style.position = 'absolute';\n\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\n\t\t\t} else {\n\t\t\t\ttemplate.style.position = 'fixed';\n\t\t\t}\n\t\t}\n\n\t\tif(_currentWindowScrollY === undefined) {\n\t\t\t_shout('initialLayout');\n\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n\t\t}\n\t\t\n\t\t// add classes to root element of PhotoSwipe\n\t\tvar rootClasses = 'pswp--open ';\n\t\tif(_options.mainClass) {\n\t\t\trootClasses += _options.mainClass + ' ';\n\t\t}\n\t\tif(_options.showHideOpacity) {\n\t\t\trootClasses += 'pswp--animate_opacity ';\n\t\t}\n\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\n\t\trootClasses += _features.svg ? ' pswp--svg' : '';\n\t\tframework.addClass(template, rootClasses);\n\n\t\tself.updateSize();\n\n\t\t// initial update\n\t\t_containerShiftIndex = -1;\n\t\t_indexDiff = null;\n\t\tfor(i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n\t\t}\n\n\t\tif(!_oldIE) {\n\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n\t\t}\t\n\n\t\t_listen('initialZoomInEnd', function() {\n\t\t\tself.setContent(_itemHolders[0], _currentItemIndex-1);\n\t\t\tself.setContent(_itemHolders[2], _currentItemIndex+1);\n\n\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n\t\t\tif(_options.focus) {\n\t\t\t\t// focus causes layout, \n\t\t\t\t// which causes lag during the animation, \n\t\t\t\t// that's why we delay it untill the initial zoom transition ends\n\t\t\t\ttemplate.focus();\n\t\t\t}\n\t\t\t \n\n\t\t\t_bindEvents();\n\t\t});\n\n\t\t// set content for center slide (first time)\n\t\tself.setContent(_itemHolders[1], _currentItemIndex);\n\t\t\n\t\tself.updateCurrItem();\n\n\t\t_shout('afterInit');\n\n\t\tif(!_isFixedPosition) {\n\n\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\n\t\t\t// \n\t\t\t// This is done to detect when Safari top & bottom bars appear, \n\t\t\t// as this action doesn't trigger any events (like resize). \n\t\t\t// \n\t\t\t// On iOS8 they fixed this.\n\t\t\t// \n\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\t\t\t\n\t\t\t_updateSizeInterval = setInterval(function() {\n\t\t\t\tif(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel)  ) {\n\t\t\t\t\tself.updateSize();\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}\n\n\t\tframework.addClass(template, 'pswp--visible');\n\t},\n\n\t// Close the gallery, then destroy it\n\tclose: function() {\n\t\tif(!_isOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\t_isOpen = false;\n\t\t_isDestroying = true;\n\t\t_shout('close');\n\t\t_unbindEvents();\n\n\t\t_showOrHide(self.currItem, null, true, self.destroy);\n\t},\n\n\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n\tdestroy: function() {\n\t\t_shout('destroy');\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'true');\n\t\ttemplate.className = _initalClassName;\n\n\t\tif(_updateSizeInterval) {\n\t\t\tclearInterval(_updateSizeInterval);\n\t\t}\n\n\t\tframework.unbind(self.scrollWrap, _downEvents, self);\n\n\t\t// we unbind scroll event at the end, as closing animation may depend on it\n\t\tframework.unbind(window, 'scroll', self);\n\n\t\t_stopDragUpdateLoop();\n\n\t\t_stopAllAnimations();\n\n\t\t_listeners = null;\n\t},\n\n\t/**\n\t * Pan image to position\n\t * @param {Number} x     \n\t * @param {Number} y     \n\t * @param {Boolean} force Will ignore bounds if set to true.\n\t */\n\tpanTo: function(x,y,force) {\n\t\tif(!force) {\n\t\t\tif(x > _currPanBounds.min.x) {\n\t\t\t\tx = _currPanBounds.min.x;\n\t\t\t} else if(x < _currPanBounds.max.x) {\n\t\t\t\tx = _currPanBounds.max.x;\n\t\t\t}\n\n\t\t\tif(y > _currPanBounds.min.y) {\n\t\t\t\ty = _currPanBounds.min.y;\n\t\t\t} else if(y < _currPanBounds.max.y) {\n\t\t\t\ty = _currPanBounds.max.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\t_panOffset.x = x;\n\t\t_panOffset.y = y;\n\t\t_applyCurrentZoomPan();\n\t},\n\t\n\thandleEvent: function (e) {\n\t\te = e || window.event;\n\t\tif(_globalEventHandlers[e.type]) {\n\t\t\t_globalEventHandlers[e.type](e);\n\t\t}\n\t},\n\n\n\tgoTo: function(index) {\n\n\t\tindex = _getLoopedId(index);\n\n\t\tvar diff = index - _currentItemIndex;\n\t\t_indexDiff = diff;\n\n\t\t_currentItemIndex = index;\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_currPositionIndex -= diff;\n\t\t\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\t\t\n\n\t\t_stopAllAnimations();\n\t\t_mainScrollAnimating = false;\n\n\t\tself.updateCurrItem();\n\t},\n\tnext: function() {\n\t\tself.goTo( _currentItemIndex + 1);\n\t},\n\tprev: function() {\n\t\tself.goTo( _currentItemIndex - 1);\n\t},\n\n\t// update current zoom/pan objects\n\tupdateCurrZoomItem: function(emulateSetContent) {\n\t\tif(emulateSetContent) {\n\t\t\t_shout('beforeChange', 0);\n\t\t}\n\n\t\t// itemHolder[1] is middle (current) item\n\t\tif(_itemHolders[1].el.children.length) {\n\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\n\t\t\tif( framework.hasClass(zoomElement, 'pswp__zoom-wrap') ) {\n\t\t\t\t_currZoomElementStyle = zoomElement.style;\n\t\t\t} else {\n\t\t\t\t_currZoomElementStyle = null;\n\t\t\t}\n\t\t} else {\n\t\t\t_currZoomElementStyle = null;\n\t\t}\n\t\t\n\t\t_currPanBounds = self.currItem.bounds;\t\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t_panOffset.y = _currPanBounds.center.y;\n\n\t\tif(emulateSetContent) {\n\t\t\t_shout('afterChange');\n\t\t}\n\t},\n\n\n\tinvalidateCurrItems: function() {\n\t\t_itemsNeedUpdate = true;\n\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\tif( _itemHolders[i].item ) {\n\t\t\t\t_itemHolders[i].item.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateCurrItem: function(beforeAnimation) {\n\n\t\tif(_indexDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar diffAbs = Math.abs(_indexDiff),\n\t\t\ttempHolder;\n\n\t\tif(beforeAnimation && diffAbs < 2) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_renderMaxResolution = false;\n\t\t\n\t\t_shout('beforeChange', _indexDiff);\n\n\t\tif(diffAbs >= NUM_HOLDERS) {\n\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n\t\t\tdiffAbs = NUM_HOLDERS;\n\t\t}\n\t\tfor(var i = 0; i < diffAbs; i++) {\n\t\t\tif(_indexDiff > 0) {\n\t\t\t\ttempHolder = _itemHolders.shift();\n\t\t\t\t_itemHolders[NUM_HOLDERS-1] = tempHolder; // move first to last\n\n\t\t\t\t_containerShiftIndex++;\n\t\t\t\t_setTranslateX( (_containerShiftIndex+2) * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n\t\t\t} else {\n\t\t\t\ttempHolder = _itemHolders.pop();\n\t\t\t\t_itemHolders.unshift( tempHolder ); // move last to first\n\n\t\t\t\t_containerShiftIndex--;\n\t\t\t\t_setTranslateX( _containerShiftIndex * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// reset zoom/pan on previous item\n\t\tif(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\n\t\t\tif(prevItem.initialZoomLevel !== _currZoomLevel) {\n\t\t\t\t_calculateItemSize(prevItem , _viewportSize );\n\t\t\t\t_setImageSize(prevItem);\n\t\t\t\t_applyZoomPanToItem( prevItem ); \t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\t// reset diff after update\n\t\t_indexDiff = 0;\n\n\t\tself.updateCurrZoomItem();\n\n\t\t_prevItemIndex = _currentItemIndex;\n\n\t\t_shout('afterChange');\n\t\t\n\t},\n\n\n\n\tupdateSize: function(force) {\n\t\t\n\t\tif(!_isFixedPosition && _options.modal) {\n\t\t\tvar windowScrollY = framework.getScrollY();\n\t\t\tif(_currentWindowScrollY !== windowScrollY) {\n\t\t\t\ttemplate.style.top = windowScrollY + 'px';\n\t\t\t\t_currentWindowScrollY = windowScrollY;\n\t\t\t}\n\t\t\tif(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_windowVisibleSize.x = window.innerWidth;\n\t\t\t_windowVisibleSize.y = window.innerHeight;\n\n\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\n\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\n\t\t}\n\n\n\n\t\t_viewportSize.x = self.scrollWrap.clientWidth;\n\t\t_viewportSize.y = self.scrollWrap.clientHeight;\n\n\t\t_updatePageScrollOffset();\n\n\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n\t\t_slideSize.y = _viewportSize.y;\n\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\n\t\t_shout('beforeResize'); // even may be used for example to switch image sources\n\n\n\t\t// don't re-calculate size on inital size update\n\t\tif(_containerShiftIndex !== undefined) {\n\n\t\t\tvar holder,\n\t\t\t\titem,\n\t\t\t\thIndex;\n\n\t\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t\tholder = _itemHolders[i];\n\t\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, holder.el.style);\n\n\t\t\t\thIndex = _currentItemIndex+i-1;\n\n\t\t\t\tif(_options.loop && _getNumItems() > 2) {\n\t\t\t\t\thIndex = _getLoopedId(hIndex);\n\t\t\t\t}\n\n\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\n\t\t\t\titem = _getItemAt( hIndex );\n\n\t\t\t\t// re-render gallery item if `needsUpdate`,\n\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\n\t\t\t\tif( item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds) ) {\n\n\t\t\t\t\tself.cleanSlide( item );\n\t\t\t\t\t\n\t\t\t\t\tself.setContent( holder, hIndex );\n\n\t\t\t\t\t// if \"center\" slide\n\t\t\t\t\tif(i === 1) {\n\t\t\t\t\t\tself.currItem = item;\n\t\t\t\t\t\tself.updateCurrZoomItem(true);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.needsUpdate = false;\n\n\t\t\t\t} else if(holder.index === -1 && hIndex >= 0) {\n\t\t\t\t\t// add content first time\n\t\t\t\t\tself.setContent( holder, hIndex );\n\t\t\t\t}\n\t\t\t\tif(item && item.container) {\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t_setImageSize(item);\n\t\t\t\t\t_applyZoomPanToItem( item );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t_itemsNeedUpdate = false;\n\t\t}\t\n\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\t\t_currPanBounds = self.currItem.bounds;\n\n\t\tif(_currPanBounds) {\n\t\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t\t_panOffset.y = _currPanBounds.center.y;\n\t\t\t_applyCurrentZoomPan( true );\n\t\t}\n\t\t\n\t\t_shout('resize');\n\t},\n\t\n\t// Zoom current item to\n\tzoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn) {\n\t\t/*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n\t\tif(centerPoint) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x ;\n\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y ;\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\t\t}\n\n\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\n\t\t\tdestPanOffset = {};\n\n\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n\t\tvar initialZoomLevel = _currZoomLevel;\n\t\tvar initialPanOffset = {\n\t\t\tx: _panOffset.x,\n\t\t\ty: _panOffset.y\n\t\t};\n\n\t\t_roundPoint(destPanOffset);\n\n\t\tvar onUpdate = function(now) {\n\t\t\tif(now === 1) {\n\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t_panOffset.x = destPanOffset.x;\n\t\t\t\t_panOffset.y = destPanOffset.y;\n\t\t\t} else {\n\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t}\n\n\t\t\tif(updateFn) {\n\t\t\t\tupdateFn(now);\n\t\t\t}\n\n\t\t\t_applyCurrentZoomPan( now === 1 );\n\t\t};\n\n\t\tif(speed) {\n\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n\t\t} else {\n\t\t\tonUpdate(1);\n\t\t}\n\t}\n\n\n};\n\n\n/*>>core*/\n\n/*>>gestures*/\n/**\n * Mouse/touch/pointer event handlers.\n * \n * separated from @core.js for readability\n */\n\nvar MIN_SWIPE_DISTANCE = 30,\n\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\nvar _gestureStartTime,\n\t_gestureCheckSpeedTime,\n\n\t// pool of objects that are used during dragging of zooming\n\tp = {}, // first point\n\tp2 = {}, // second point (for zoom gesture)\n\tdelta = {},\n\t_currPoint = {},\n\t_startPoint = {},\n\t_currPointers = [],\n\t_startMainScrollPos = {},\n\t_releaseAnimData,\n\t_posPoints = [], // array of points during dragging, used to determine type of gesture\n\t_tempPoint = {},\n\n\t_isZoomingIn,\n\t_verticalDragInitiated,\n\t_oldAndroidTouchEndTimeout,\n\t_currZoomedItemIndex = 0,\n\t_centerPoint = _getEmptyPoint(),\n\t_lastReleaseTime = 0,\n\t_isDragging, // at least one pointer is down\n\t_isMultitouch, // at least two _pointers are down\n\t_zoomStarted, // zoom level changed during zoom gesture\n\t_moved,\n\t_dragAnimFrame,\n\t_mainScrollShifted,\n\t_currentPoints, // array of current touch points\n\t_isZooming,\n\t_currPointsDistance,\n\t_startPointsDistance,\n\t_currPanBounds,\n\t_mainScrollPos = _getEmptyPoint(),\n\t_currZoomElementStyle,\n\t_mainScrollAnimating, // true, if animation after swipe gesture is running\n\t_midZoomPoint = _getEmptyPoint(),\n\t_currCenterPoint = _getEmptyPoint(),\n\t_direction,\n\t_isFirstMove,\n\t_opacityChanged,\n\t_bgOpacity,\n\t_wasOverInitialZoom,\n\n\t_isEqualPoints = function(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t},\n\t_isNearbyPoints = function(touch0, touch1) {\n\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n\t},\n\t_calculatePointsDistance = function(p1, p2) {\n\t\t_tempPoint.x = Math.abs( p1.x - p2.x );\n\t\t_tempPoint.y = Math.abs( p1.y - p2.y );\n\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n\t},\n\t_stopDragUpdateLoop = function() {\n\t\tif(_dragAnimFrame) {\n\t\t\t_cancelAF(_dragAnimFrame);\n\t\t\t_dragAnimFrame = null;\n\t\t}\n\t},\n\t_dragUpdateLoop = function() {\n\t\tif(_isDragging) {\n\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\n\t\t\t_renderMovement();\n\t\t}\n\t},\n\t_canPan = function() {\n\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel ===  self.currItem.initialZoomLevel);\n\t},\n\t\n\t// find the closest parent DOM element\n\t_closestElement = function(el, fn) {\n\t  \tif(!el || el === document) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \t// don't search elements above pswp__scroll-wrap\n\t  \tif(el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1 ) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \tif( fn(el) ) {\n\t  \t\treturn el;\n\t  \t}\n\n\t  \treturn _closestElement(el.parentNode, fn);\n\t},\n\n\t_preventObj = {},\n\t_preventDefaultEventBehaviour = function(e, isDown) {\n\t    _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n\t\t_shout('preventDragEvent', e, isDown, _preventObj);\n\t\treturn _preventObj.prevent;\n\n\t},\n\t_convertTouchToPoint = function(touch, p) {\n\t\tp.x = touch.pageX;\n\t\tp.y = touch.pageY;\n\t\tp.id = touch.identifier;\n\t\treturn p;\n\t},\n\t_findCenterOfPoints = function(p1, p2, pCenter) {\n\t\tpCenter.x = (p1.x + p2.x) * 0.5;\n\t\tpCenter.y = (p1.y + p2.y) * 0.5;\n\t},\n\t_pushPosPoint = function(time, x, y) {\n\t\tif(time - _gestureCheckSpeedTime > 50) {\n\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\n\t\t\to.x = x;\n\t\t\to.y = y; \n\t\t\t_posPoints.push(o);\n\t\t\t_gestureCheckSpeedTime = time;\n\t\t}\n\t},\n\n\t_calculateVerticalDragOpacityRatio = function() {\n\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n\t\treturn 1 -  Math.abs( yOffset / (_viewportSize.y / 2)  );\n\t},\n\n\t\n\t// points pool, reused during touch events\n\t_ePoint1 = {},\n\t_ePoint2 = {},\n\t_tempPointsArr = [],\n\t_tempCounter,\n\t_getTouchPoints = function(e) {\n\t\t// clean up previous points, without recreating array\n\t\twhile(_tempPointsArr.length > 0) {\n\t\t\t_tempPointsArr.pop();\n\t\t}\n\n\t\tif(!_pointerEventEnabled) {\n\t\t\tif(e.type.indexOf('touch') > -1) {\n\n\t\t\t\tif(e.touches && e.touches.length > 0) {\n\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n\t\t\t\t\tif(e.touches.length > 1) {\n\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_ePoint1.x = e.pageX;\n\t\t\t\t_ePoint1.y = e.pageY;\n\t\t\t\t_ePoint1.id = '';\n\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\n\t\t\t}\n\t\t} else {\n\t\t\t_tempCounter = 0;\n\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\n\t\t\t_currPointers.forEach(function(p) {\n\t\t\t\tif(_tempCounter === 0) {\n\t\t\t\t\t_tempPointsArr[0] = p;\n\t\t\t\t} else if(_tempCounter === 1) {\n\t\t\t\t\t_tempPointsArr[1] = p;\n\t\t\t\t}\n\t\t\t\t_tempCounter++;\n\n\t\t\t});\n\t\t}\n\t\treturn _tempPointsArr;\n\t},\n\n\t_panOrMoveMainScroll = function(axis, delta) {\n\n\t\tvar panFriction,\n\t\t\toverDiff = 0,\n\t\t\tnewOffset = _panOffset[axis] + delta[axis],\n\t\t\tstartOverDiff,\n\t\t\tdir = delta[axis] > 0,\n\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\n\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n\t\t\tnewPanPos,\n\t\t\tnewMainScrollPos;\n\n\t\t// calculate fdistance over the bounds and friction\n\t\tif(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \n\t\t\t// Looks not as nice as was expected. Left for history.\n\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n\t\t} else {\n\t\t\tpanFriction = 1;\n\t\t}\n\t\t\n\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n\t\t// move main scroll or start panning\n\t\tif(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n\n\t\t\tif(!_currZoomElementStyle) {\n\t\t\t\t\n\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t} else if(_direction === 'h' && axis === 'x' && !_zoomStarted ) {\n\t\t\t\t\n\t\t\t\tif(dir) {\n\t\t\t\t\tif(newOffset > _currPanBounds.min[axis]) {\n\t\t\t\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\n\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// drag right\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\t\t\t\t\t\tif(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\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} else {\n\n\t\t\t\t\tif(newOffset < _currPanBounds.max[axis] ) {\n\t\t\t\t\t\tpanFriction =_options.panEndFriction;\n\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\n\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t\t\t\tif(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t//\n\t\t\t}\n\n\t\t\tif(axis === 'x') {\n\n\t\t\t\tif(newMainScrollPos !== undefined) {\n\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\n\t\t\t\t\tif(newMainScrollPos === _startMainScrollPos.x) {\n\t\t\t\t\t\t_mainScrollShifted = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_mainScrollShifted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\tif(newPanPos !== undefined) {\n\t\t\t\t\t\t_panOffset.x = newPanPos;\n\t\t\t\t\t} else if(!_mainScrollShifted) {\n\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newMainScrollPos !== undefined;\n\t\t\t}\n\n\t\t}\n\n\t\tif(!_mainScrollAnimating) {\n\t\t\t\n\t\t\tif(!_mainScrollShifted) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t},\n\n\t// Pointerdown/touchstart/mousedown handler\n\t_onDragStart = function(e) {\n\n\t\t// Allow dragging only via left mouse button.\n\t\t// As this handler is not added in IE8 - we ignore e.which\n\t\t// \n\t\t// http://www.quirksmode.org/js/events_properties.html\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\t\tif(e.type === 'mousedown' && e.button > 0  ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_initialZoomRunning) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_preventDefaultEventBehaviour(e, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\n\n\t\t_shout('pointerDown');\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex < 0) {\n\t\t\t\tpointerIndex = _currPointers.length;\n\t\t\t}\n\t\t\t_currPointers[pointerIndex] = {x:e.pageX, y:e.pageY, id: e.pointerId};\n\t\t}\n\t\t\n\n\n\t\tvar startPointsList = _getTouchPoints(e),\n\t\t\tnumPoints = startPointsList.length;\n\n\t\t_currentPoints = null;\n\n\t\t_stopAllAnimations();\n\n\t\t// init drag\n\t\tif(!_isDragging || numPoints === 1) {\n\n\t\t\t\n\n\t\t\t_isDragging = _isFirstMove = true;\n\t\t\tframework.bind(window, _upMoveEvents, self);\n\n\t\t\t_isZoomingIn = \n\t\t\t\t_wasOverInitialZoom = \n\t\t\t\t_opacityChanged = \n\t\t\t\t_verticalDragInitiated = \n\t\t\t\t_mainScrollShifted = \n\t\t\t\t_moved = \n\t\t\t\t_isMultitouch = \n\t\t\t\t_zoomStarted = false;\n\n\t\t\t_direction = null;\n\n\t\t\t_shout('firstTouchStart', startPointsList);\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_currPanDist.x = _currPanDist.y = 0;\n\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\n\t\t\t_equalizePoints(_startPoint, _currPoint);\n\n\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\n\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n\t\t\t_posPoints = [{\n\t\t\t\tx: _currPoint.x,\n\t\t\t\ty: _currPoint.y\n\t\t\t}];\n\n\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n\t\t\t//_mainScrollAnimationEnd(true);\n\t\t\t_calculatePanBounds( _currZoomLevel, true );\n\t\t\t\n\t\t\t// Start rendering\n\t\t\t_stopDragUpdateLoop();\n\t\t\t_dragUpdateLoop();\n\t\t\t\n\t\t}\n\n\t\t// init zoom\n\t\tif(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_zoomStarted = false; // true if zoom changed at least once\n\n\t\t\t_isZooming = _isMultitouch = true;\n\t\t\t_currPanDist.y = _currPanDist.x = 0;\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_equalizePoints(p, startPointsList[0]);\n\t\t\t_equalizePoints(p2, startPointsList[1]);\n\n\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\n\n\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n\t\t}\n\n\n\t},\n\n\t// Pointermove/touchmove/mousemove handler\n\t_onDragMove = function(e) {\n\n\t\te.preventDefault();\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\tvar p = _currPointers[pointerIndex];\n\t\t\t\tp.x = e.pageX;\n\t\t\t\tp.y = e.pageY; \n\t\t\t}\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tvar touchesList = _getTouchPoints(e);\n\t\t\tif(!_direction && !_moved && !_isZooming) {\n\n\t\t\t\tif(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\n\t\t\t\t\t_direction = 'h';\n\t\t\t\t} else {\n\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n\t\t\t\t\t// check the direction of movement\n\t\t\t\t\tif(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\n\t\t\t\t\t\t_currentPoints = touchesList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_currentPoints = touchesList;\n\t\t\t}\n\t\t}\t\n\t},\n\t// \n\t_renderMovement =  function() {\n\n\t\tif(!_currentPoints) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar numPoints = _currentPoints.length;\n\n\t\tif(numPoints === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_equalizePoints(p, _currentPoints[0]);\n\n\t\tdelta.x = p.x - _currPoint.x;\n\t\tdelta.y = p.y - _currPoint.y;\n\n\t\tif(_isZooming && numPoints > 1) {\n\t\t\t// Handle behaviour for more than 1 point\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\t\t\n\t\t\t// check if one of two points changed\n\t\t\tif( !delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_equalizePoints(p2, _currentPoints[1]);\n\n\n\t\t\tif(!_zoomStarted) {\n\t\t\t\t_zoomStarted = true;\n\t\t\t\t_shout('zoomGestureStarted');\n\t\t\t}\n\t\t\t\n\t\t\t// Distance between two points\n\t\t\tvar pointsDistance = _calculatePointsDistance(p,p2);\n\n\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\n\n\t\t\t// slightly over the of initial zoom level\n\t\t\tif(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n\t\t\t\t_wasOverInitialZoom = true;\n\t\t\t}\n\n\t\t\t// Apply the friction if zoom level is out of the bounds\n\t\t\tvar zoomFriction = 1,\n\t\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\t\tif ( zoomLevel < minZoomLevel ) {\n\t\t\t\t\n\t\t\t\tif(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n\t\t\t\t\t// fade out background if zooming out\n\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\n\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n\t\t\t\t\t_applyBgOpacity(percent);\n\t\t\t\t\t_shout('onPinchClose', percent);\n\t\t\t\t\t_opacityChanged = true;\n\t\t\t\t} else {\n\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n\t\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t\t}\n\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if ( zoomLevel > maxZoomLevel ) {\n\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / ( minZoomLevel * 6 );\n\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t}\n\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n\t\t\t}\n\n\t\t\tif(zoomFriction < 0) {\n\t\t\t\tzoomFriction = 0;\n\t\t\t}\n\n\t\t\t// distance between touch points after friction is applied\n\t\t\t_currPointsDistance = pointsDistance;\n\n\t\t\t// _centerPoint - The point in the middle of two pointers\n\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\n\t\t\n\t\t\t// paning with two pointers pressed\n\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\n\n\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\n\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\n\t\t\t_currZoomLevel = zoomLevel;\n\t\t\t_applyCurrentZoomPan();\n\n\t\t} else {\n\n\t\t\t// handle behaviour for one point (dragging or panning)\n\n\t\t\tif(!_direction) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_isFirstMove) {\n\t\t\t\t_isFirstMove = false;\n\n\t\t\t\t// subtract drag distance that was used during the detection direction  \n\n\t\t\t\tif( Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\n\t\t\t// do nothing if pointers position hasn't changed\n\t\t\tif(delta.x === 0 && delta.y === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_direction === 'v' && _options.closeOnVerticalDrag) {\n\t\t\t\tif(!_canPan()) {\n\t\t\t\t\t_currPanDist.y += delta.y;\n\t\t\t\t\t_panOffset.y += delta.y;\n\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\t\t\t_verticalDragInitiated = true;\n\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\n\n\t\t\t\t\t_applyBgOpacity(opacityRatio);\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n\t\t\t_moved = true;\n\t\t\t_currPanBounds = self.currItem.bounds;\n\t\t\t\n\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\n\t\t\tif(!mainScrollChanged) {\n\t\t\t\t_panOrMoveMainScroll('y', delta);\n\n\t\t\t\t_roundPoint(_panOffset);\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t}\n\n\t},\n\t\n\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n\t_onDragRelease = function(e) {\n\n\t\tif(_features.isOldAndroid ) {\n\n\t\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \n\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\n\t\t\t// which causes fake mousedown event\n\t\t\t// so we block mousedown/up for 600ms\n\t\t\tif( e.type.indexOf('touch') > -1 ) {\n\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\n\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function() {\n\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\n\t\t\t\t}, 600);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t_shout('pointerUp');\n\n\t\tif(_preventDefaultEventBehaviour(e, false)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar releasePoint;\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\t\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\tvar MSPOINTER_TYPES = {\n\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \n\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\n\t\t\t\t\t};\n\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n\t\t\t\t\tif(!releasePoint.type) {\n\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar touchList = _getTouchPoints(e),\n\t\t\tgestureType,\n\t\t\tnumPoints = touchList.length;\n\n\t\tif(e.type === 'mouseup') {\n\t\t\tnumPoints = 0;\n\t\t}\n\n\t\t// Do nothing if there were 3 touch points or more\n\t\tif(numPoints === 2) {\n\t\t\t_currentPoints = null;\n\t\t\treturn true;\n\t\t}\n\n\t\t// if second pointer released\n\t\tif(numPoints === 1) {\n\t\t\t_equalizePoints(_startPoint, touchList[0]);\n\t\t}\t\t\t\t\n\n\n\t\t// pointer hasn't moved, send \"tap release\" point\n\t\tif(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n\t\t\tif(!releasePoint) {\n\t\t\t\tif(e.type === 'mouseup') {\n\t\t\t\t\treleasePoint = {x: e.pageX, y: e.pageY, type:'mouse'};\n\t\t\t\t} else if(e.changedTouches && e.changedTouches[0]) {\n\t\t\t\t\treleasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type:'touch'};\n\t\t\t\t}\t\t\n\t\t\t}\n\n\t\t\t_shout('touchRelease', e, releasePoint);\n\t\t}\n\n\t\t// Difference in time between releasing of two last touch points (zoom gesture)\n\t\tvar releaseTimeDiff = -1;\n\n\t\t// Gesture completed, no pointers left\n\t\tif(numPoints === 0) {\n\t\t\t_isDragging = false;\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\n\t\t\t_stopDragUpdateLoop();\n\n\t\t\tif(_isZooming) {\n\t\t\t\t// Two points released at the same time\n\t\t\t\treleaseTimeDiff = 0;\n\t\t\t} else if(_lastReleaseTime !== -1) {\n\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n\t\t\t}\n\t\t}\n\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\t\t\n\t\tif(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n\t\t\tgestureType = 'zoom';\n\t\t} else {\n\t\t\tgestureType = 'swipe';\n\t\t}\n\n\t\tif(_isZooming && numPoints < 2) {\n\t\t\t_isZooming = false;\n\n\t\t\t// Only second point released\n\t\t\tif(numPoints === 1) {\n\t\t\t\tgestureType = 'zoomPointerUp';\n\t\t\t}\n\t\t\t_shout('zoomGestureEnded');\n\t\t}\n\n\t\t_currentPoints = null;\n\t\tif(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n\t\t\t// nothing to animate\n\t\t\treturn;\n\t\t}\n\t\n\t\t_stopAllAnimations();\n\n\t\t\n\t\tif(!_releaseAnimData) {\n\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\n\t\t}\n\t\t\n\t\t_releaseAnimData.calculateSwipeSpeed('x');\n\n\n\t\tif(_verticalDragInitiated) {\n\n\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\tif(opacityRatio < _options.verticalDragRange) {\n\t\t\t\tself.close();\n\t\t\t} else {\n\t\t\t\tvar initalPanY = _panOffset.y,\n\t\t\t\t\tinitialBgOpacity = _bgOpacity;\n\n\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now) {\n\t\t\t\t\t\n\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n\t\t\t\t\t_applyBgOpacity(  (1 - initialBgOpacity) * now + initialBgOpacity );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t});\n\n\t\t\t\t_shout('onVerticalDrag', 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\n\t\t// main scroll \n\t\tif(  (_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n\t\t\tif(itemChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgestureType = 'zoomPointerUp';\n\t\t}\n\n\t\t// prevent zoom/pan animation when main scroll animation runs\n\t\tif(_mainScrollAnimating) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds)  \n\t\tif(gestureType !== 'swipe') {\n\t\t\t_completeZoomGesture();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n\t\tif(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n\t\t\t_completePanGesture(_releaseAnimData);\n\t\t}\n\t},\n\n\n\t// Returns object with data about gesture\n\t// It's created only once and then reused\n\t_initDragReleaseAnimationData  = function() {\n\t\t// temp local vars\n\t\tvar lastFlickDuration,\n\t\t\ttempReleasePos;\n\n\t\t// s = this\n\t\tvar s = {\n\t\t\tlastFlickOffset: {},\n\t\t\tlastFlickDist: {},\n\t\t\tlastFlickSpeed: {},\n\t\t\tslowDownRatio:  {},\n\t\t\tslowDownRatioReverse:  {},\n\t\t\tspeedDecelerationRatio:  {},\n\t\t\tspeedDecelerationRatioAbs:  {},\n\t\t\tdistanceOffset:  {},\n\t\t\tbackAnimDestination: {},\n\t\t\tbackAnimStarted: {},\n\t\t\tcalculateSwipeSpeed: function(axis) {\n\t\t\t\t\n\n\t\t\t\tif( _posPoints.length > 1) {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length-2][axis];\n\t\t\t\t} else {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n\t\t\t\t\ttempReleasePos = _startPoint[axis];\n\t\t\t\t}\n\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n\t\t\t\tif(s.lastFlickDist[axis] > 20) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n\t\t\t\t} else {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\tif( Math.abs(s.lastFlickSpeed[axis]) < 0.1 ) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ts.slowDownRatio[axis] = 0.95;\n\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\ts.speedDecelerationRatio[axis] = 1;\n\t\t\t},\n\n\t\t\tcalculateOverBoundsAnimOffset: function(axis, speed) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\n\t\t\t\t\tif(_panOffset[axis] > _currPanBounds.min[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(s.backAnimDestination[axis] !== undefined) {\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\t\t\tif(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\n\n\t\t\t\t\t\t\t_animateProp('bounceZoomPan'+axis,_panOffset[axis], \n\t\t\t\t\t\t\t\ts.backAnimDestination[axis], \n\t\t\t\t\t\t\t\tspeed || 300, \n\t\t\t\t\t\t\t\tframework.easing.sine.out, \n\t\t\t\t\t\t\t\tfunction(pos) {\n\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\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}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\n\t\t\tcalculateAnimOffset: function(axis) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] + \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] - \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpanAnimLoop: function() {\n\t\t\t\tif ( _animations.zoomPan ) {\n\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n\t\t\t\t\ts.now = _getCurrentTime();\n\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\n\t\t\t\t\ts.lastNow = s.now;\n\t\t\t\t\t\n\t\t\t\t\ts.calculateAnimOffset('x');\n\t\t\t\t\ts.calculateAnimOffset('y');\n\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\n\n\n\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n\t\t\t\t\t\t// round pan position\n\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\n\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\n\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\n\t\t\t\t\t\t_stopAnimation('zoomPan');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\treturn s;\n\t},\n\n\t_completePanGesture = function(animData) {\n\t\t// calculate swipe speed for Y axis (paanning)\n\t\tanimData.calculateSwipeSpeed('y');\n\n\t\t_currPanBounds = self.currItem.bounds;\n\t\t\n\t\tanimData.backAnimDestination = {};\n\t\tanimData.backAnimStarted = {};\n\n\t\t// Avoid acceleration animation if speed is too low\n\t\tif(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05 ) {\n\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n\t\t\tanimData.calculateOverBoundsAnimOffset('x');\n\t\t\tanimData.calculateOverBoundsAnimOffset('y');\n\t\t\treturn true;\n\t\t}\n\n\t\t// Animation loop that controls the acceleration after pan gesture ends\n\t\t_registerStartAnimation('zoomPan');\n\t\tanimData.lastNow = _getCurrentTime();\n\t\tanimData.panAnimLoop();\n\t},\n\n\n\t_finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData) {\n\t\tvar itemChanged;\n\t\tif(!_mainScrollAnimating) {\n\t\t\t_currZoomedItemIndex = _currentItemIndex;\n\t\t}\n\n\n\t\t\n\t\tvar itemsDiff;\n\n\t\tif(gestureType === 'swipe') {\n\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\n\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \n\t\t\t// and last flick gesture was in right direction\n\t\t\tif(totalShiftDist > MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20) ) {\n\t\t\t\t// go to prev item\n\t\t\t\titemsDiff = -1;\n\t\t\t} else if(totalShiftDist < -MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20) ) {\n\t\t\t\t// go to next item\n\t\t\t\titemsDiff = 1;\n\t\t\t}\n\t\t}\n\n\t\tvar nextCircle;\n\n\t\tif(itemsDiff) {\n\t\t\t\n\t\t\t_currentItemIndex += itemsDiff;\n\n\t\t\tif(_currentItemIndex < 0) {\n\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems()-1 : 0;\n\t\t\t\tnextCircle = true;\n\t\t\t} else if(_currentItemIndex >= _getNumItems()) {\n\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems()-1;\n\t\t\t\tnextCircle = true;\n\t\t\t}\n\n\t\t\tif(!nextCircle || _options.loop) {\n\t\t\t\t_indexDiff += itemsDiff;\n\t\t\t\t_currPositionIndex -= itemsDiff;\n\t\t\t\titemChanged = true;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t}\n\n\t\tvar animateToX = _slideSize.x * _currPositionIndex;\n\t\tvar animateToDist = Math.abs( animateToX - _mainScrollPos.x );\n\t\tvar finishAnimDuration;\n\n\n\t\tif(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\n\t\t\tfinishAnimDuration = 333; \n\t\t} else {\n\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ? \n\t\t\t\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) : \n\t\t\t\t\t\t\t\t\t333;\n\n\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\n\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\n\t\t}\n\n\t\tif(_currZoomedItemIndex === _currentItemIndex) {\n\t\t\titemChanged = false;\n\t\t}\n\t\t\n\t\t_mainScrollAnimating = true;\n\t\t\n\t\t_shout('mainScrollAnimStart');\n\n\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out, \n\t\t\t_moveMainScroll,\n\t\t\tfunction() {\n\t\t\t\t_stopAllAnimations();\n\t\t\t\t_mainScrollAnimating = false;\n\t\t\t\t_currZoomedItemIndex = -1;\n\t\t\t\t\n\t\t\t\tif(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n\t\t\t\t\tself.updateCurrItem();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_shout('mainScrollAnimComplete');\n\t\t\t}\n\t\t);\n\n\t\tif(itemChanged) {\n\t\t\tself.updateCurrItem(true);\n\t\t}\n\n\t\treturn itemChanged;\n\t},\n\n\t_calculateZoomLevel = function(touchesDistance) {\n\t\treturn  1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n\t},\n\n\t// Resets zoom if it's out of bounds\n\t_completeZoomGesture = function() {\n\t\tvar destZoomLevel = _currZoomLevel,\n\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\tif ( _currZoomLevel < minZoomLevel ) {\n\t\t\tdestZoomLevel = minZoomLevel;\n\t\t} else if ( _currZoomLevel > maxZoomLevel ) {\n\t\t\tdestZoomLevel = maxZoomLevel;\n\t\t}\n\n\t\tvar destOpacity = 1,\n\t\t\tonUpdate,\n\t\t\tinitialOpacity = _bgOpacity;\n\n\t\tif(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n\t\t\t//_closedByScroll = true;\n\t\t\tself.close();\n\t\t\treturn true;\n\t\t}\n\n\t\tif(_opacityChanged) {\n\t\t\tonUpdate = function(now) {\n\t\t\t\t_applyBgOpacity(  (destOpacity - initialOpacity) * now + initialOpacity );\n\t\t\t};\n\t\t}\n\n\t\tself.zoomTo(destZoomLevel, 0, 200,  framework.easing.cubic.out, onUpdate);\n\t\treturn true;\n\t};\n\n\n_registerModule('Gestures', {\n\tpublicMethods: {\n\n\t\tinitGestures: function() {\n\n\t\t\t// helper function that builds touch/pointer/mouse events\n\t\t\tvar addEventNames = function(pref, down, move, up, cancel) {\n\t\t\t\t_dragStartEvent = pref + down;\n\t\t\t\t_dragMoveEvent = pref + move;\n\t\t\t\t_dragEndEvent = pref + up;\n\t\t\t\tif(cancel) {\n\t\t\t\t\t_dragCancelEvent = pref + cancel;\n\t\t\t\t} else {\n\t\t\t\t\t_dragCancelEvent = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_pointerEventEnabled = _features.pointerEvent;\n\t\t\tif(_pointerEventEnabled && _features.touch) {\n\t\t\t\t// we don't need touch events, if browser supports pointer events\n\t\t\t\t_features.touch = false;\n\t\t\t}\n\n\t\t\tif(_pointerEventEnabled) {\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\t// IE10 pointer events are case-sensitive\n\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n\t\t\t\t} else {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t}\n\t\t\t} else if(_features.touch) {\n\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\n\t\t\t\t_likelyTouchDevice = true;\n\t\t\t} else {\n\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\t\n\t\t\t}\n\n\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent  + ' ' +  _dragCancelEvent;\n\t\t\t_downEvents = _dragStartEvent;\n\n\t\t\tif(_pointerEventEnabled && !_likelyTouchDevice) {\n\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n\t\t\t}\n\t\t\t// make variable public\n\t\t\tself.likelyTouchDevice = _likelyTouchDevice; \n\t\t\t\n\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\n\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\n\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n\t\t\tif(_dragCancelEvent) {\n\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n\t\t\tif(_features.touch) {\n\t\t\t\t_downEvents += ' mousedown';\n\t\t\t\t_upMoveEvents += ' mousemove mouseup';\n\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\tif(!_likelyTouchDevice) {\n\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\n\t\t\t\t_options.allowPanToNext = false;\n\t\t\t}\n\t\t}\n\n\t}\n});\n\n\n/*>>gestures*/\n\n/*>>show-hide-transition*/\n/**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n * \n */\n\n\nvar _showOrHideTimeout,\n\t_showOrHide = function(item, img, out, completeFn) {\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\n\t\t_initialZoomRunning = true;\n\t\t_initialContentSet = true;\n\t\t\n\t\t// dimensions of small thumbnail {x:,y:,w:}.\n\t\t// Height is optional, as calculated based on large image.\n\t\tvar thumbBounds; \n\t\tif(item.initialLayout) {\n\t\t\tthumbBounds = item.initialLayout;\n\t\t\titem.initialLayout = null;\n\t\t} else {\n\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t}\n\n\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n\t\tvar onComplete = function() {\n\t\t\t_stopAnimation('initialZoom');\n\t\t\tif(!out) {\n\t\t\t\t_applyBgOpacity(1);\n\t\t\t\tif(img) {\n\t\t\t\t\timg.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tframework.addClass(template, 'pswp--animated-in');\n\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n\t\t\t} else {\n\t\t\t\tself.template.removeAttribute('style');\n\t\t\t\tself.bg.removeAttribute('style');\n\t\t\t}\n\n\t\t\tif(completeFn) {\n\t\t\t\tcompleteFn();\n\t\t\t}\n\t\t\t_initialZoomRunning = false;\n\t\t};\n\n\t\t// if bounds aren't provided, just open gallery without animation\n\t\tif(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\n\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t_applyCurrentZoomPan();\n\n\t\t\ttemplate.style.opacity = out ? 0 : 1;\n\t\t\t_applyBgOpacity(1);\n\n\t\t\tif(duration) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tonComplete();\n\t\t\t\t}, duration);\n\t\t\t} else {\n\t\t\t\tonComplete();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar startAnimation = function() {\n\t\t\tvar closeWithRaf = _closedByScroll,\n\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\t\t\t\n\t\t\t// apply hw-acceleration to image\n\t\t\tif(item.miniImg) {\n\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\n\t\t\t}\n\n\t\t\tif(!out) {\n\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\n\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t\t_registerStartAnimation('initialZoom');\n\t\t\t\n\t\t\tif(out && !closeWithRaf) {\n\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\n\t\t\t}\n\n\t\t\tif(fadeEverything) {\n\t\t\t\tif(out) {\n\t\t\t\t\tframework[ (closeWithRaf ? 'remove' : 'add') + 'Class' ](template, 'pswp--animate_opacity');\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\n\t\t\t\t\t}, 30);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_showOrHideTimeout = setTimeout(function() {\n\n\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\t\t\t\t\n\n\t\t\t\tif(!out) {\n\n\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\n\t\t\t\t\t// CSS transition work faster here, \n\t\t\t\t\t// as developer may also want to animate other things, \n\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\n\t\t\t\t\t\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t_applyBgOpacity(1);\n\n\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\ttemplate.style.opacity = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_applyBgOpacity(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t} else {\n\n\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\n\t\t\t\t\t\tinitialPanOffset = {\n\t\t\t\t\t\t\tx: _panOffset.x,\n\t\t\t\t\t\t\ty: _panOffset.y\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\n\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\n\t\t\t\t\t\tonUpdate = function(now) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(now === 1) {\n\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y  - _currentWindowScrollY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_applyBgOpacity( initalBgOpacity - now * initalBgOpacity );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(closeWithRaf) {\n\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonUpdate(1);\n\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\n\t\t};\n\t\tstartAnimation();\n\n\t\t\n\t};\n\n/*>>show-hide-transition*/\n\n/*>>items-controller*/\n/**\n*\n* Controller manages gallery items, their dimensions, and their content.\n* \n*/\n\nvar _items,\n\t_tempPanAreaSize = {},\n\t_imagesToAppendPool = [],\n\t_initialContentSet,\n\t_initialZoomRunning,\n\t_controllerDefaultOptions = {\n\t\tindex: 0,\n\t\terrorMsg: '<div class=\"pswp__error-msg\"><a href=\"%url%\" target=\"_blank\">The image</a> could not be loaded.</div>',\n\t\tforceProgressiveLoading: false, // TODO\n\t\tpreload: [1,1],\n\t\tgetNumItemsFn: function() {\n\t\t\treturn _items.length;\n\t\t}\n\t};\n\n\nvar _getItemAt,\n\t_getNumItems,\n\t_initialIsLoop,\n\t_getZeroBounds = function() {\n\t\treturn {\n\t\t\tcenter:{x:0,y:0}, \n\t\t\tmax:{x:0,y:0}, \n\t\t\tmin:{x:0,y:0}\n\t\t};\n\t},\n\t_calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH ) {\n\t\tvar bounds = item.bounds;\n\n\t\t// position of element when it's centered\n\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\n\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n\t\t// maximum pan position\n\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) : \n\t\t\t\t\t\t\tbounds.center.x;\n\t\t\n\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top : \n\t\t\t\t\t\t\tbounds.center.y;\n\t\t\n\t\t// minimum pan position\n\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\n\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n\t},\n\t_calculateItemSize = function(item, viewportSize, zoomLevel) {\n\n\t\tif (item.src && !item.loadError) {\n\t\t\tvar isInitial = !zoomLevel;\n\t\t\t\n\t\t\tif(isInitial) {\n\t\t\t\tif(!item.vGap) {\n\t\t\t\t\titem.vGap = {top:0,bottom:0};\n\t\t\t\t}\n\t\t\t\t// allows overriding vertical margin for individual items\n\t\t\t\t_shout('parseVerticalMargin', item);\n\t\t\t}\n\n\n\t\t\t_tempPanAreaSize.x = viewportSize.x;\n\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n\t\t\tif (isInitial) {\n\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\n\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\n\n\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n\t\t\t\tvar scaleMode = _options.scaleMode;\n\n\t\t\t\tif (scaleMode === 'orig') {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t} else if (scaleMode === 'fit') {\n\t\t\t\t\tzoomLevel = item.fitRatio;\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel > 1) {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t}\n\n\t\t\t\titem.initialZoomLevel = zoomLevel;\n\t\t\t\t\n\t\t\t\tif(!item.bounds) {\n\t\t\t\t\t// reuse bounds object\n\t\t\t\t\titem.bounds = _getZeroBounds(); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!zoomLevel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\n\t\t\t\titem.initialPosition = item.bounds.center;\n\t\t\t}\n\n\t\t\treturn item.bounds;\n\t\t} else {\n\t\t\titem.w = item.h = 0;\n\t\t\titem.initialZoomLevel = item.fitRatio = 1;\n\t\t\titem.bounds = _getZeroBounds();\n\t\t\titem.initialPosition = item.bounds.center;\n\n\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\n\t\t\treturn item.bounds;\n\t\t}\n\t\t\n\t},\n\n\t\n\n\n\t_appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\n\t\t\n\n\t\tif(item.loadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(img) {\n\n\t\t\titem.imageAppended = true;\n\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution) );\n\t\t\t\n\t\t\tbaseDiv.appendChild(img);\n\n\t\t\tif(keepPlaceholder) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(item && item.loaded && item.placeholder) {\n\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t},\n\t\n\n\n\t_preloadImage = function(item) {\n\t\titem.loading = true;\n\t\titem.loaded = false;\n\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\n\t\tvar onComplete = function() {\n\t\t\titem.loading = false;\n\t\t\titem.loaded = true;\n\n\t\t\tif(item.loadComplete) {\n\t\t\t\titem.loadComplete(item);\n\t\t\t} else {\n\t\t\t\titem.img = null; // no need to store image object\n\t\t\t}\n\t\t\timg.onload = img.onerror = null;\n\t\t\timg = null;\n\t\t};\n\t\timg.onload = onComplete;\n\t\timg.onerror = function() {\n\t\t\titem.loadError = true;\n\t\t\tonComplete();\n\t\t};\t\t\n\n\t\timg.src = item.src;// + '?a=' + Math.random();\n\n\t\treturn img;\n\t},\n\t_checkForError = function(item, cleanUp) {\n\t\tif(item.src && item.loadError && item.container) {\n\n\t\t\tif(cleanUp) {\n\t\t\t\titem.container.innerHTML = '';\n\t\t\t}\n\n\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%',  item.src );\n\t\t\treturn true;\n\t\t\t\n\t\t}\n\t},\n\t_setImageSize = function(item, img, maxRes) {\n\t\tif(!item.src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!img) {\n\t\t\timg = item.container.lastChild;\n\t\t}\n\n\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\t\t\n\t\tif(item.placeholder && !item.loaded) {\n\t\t\titem.placeholder.style.width = w + 'px';\n\t\t\titem.placeholder.style.height = h + 'px';\n\t\t}\n\n\t\timg.style.width = w + 'px';\n\t\timg.style.height = h + 'px';\n\t},\n\t_appendImagesPool = function() {\n\n\t\tif(_imagesToAppendPool.length) {\n\t\t\tvar poolItem;\n\n\t\t\tfor(var i = 0; i < _imagesToAppendPool.length; i++) {\n\t\t\t\tpoolItem = _imagesToAppendPool[i];\n\t\t\t\tif( poolItem.holder.index === poolItem.index ) {\n\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_imagesToAppendPool = [];\n\t\t}\n\t};\n\t\n\n\n_registerModule('Controller', {\n\n\tpublicMethods: {\n\n\t\tlazyLoadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\t\t\tvar item = _getItemAt(index);\n\n\t\t\tif(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tif (!item.src) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_preloadImage(item);\n\t\t},\n\t\tinitController: function() {\n\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\n\t\t\tself.items = _items = items;\n\t\t\t_getItemAt = self.getItemAt;\n\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n\n\n\t\t\t_initialIsLoop = _options.loop;\n\t\t\tif(_getNumItems() < 3) {\n\t\t\t\t_options.loop = false; // disable loop if less then 3 items\n\t\t\t}\n\n\t\t\t_listen('beforeChange', function(diff) {\n\n\t\t\t\tvar p = _options.preload,\n\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\n\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems() ),\n\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems() ),\n\t\t\t\t\ti;\n\n\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex+i);\n\t\t\t\t}\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex-i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('initialLayout', function() {\n\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t\t});\n\n\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\n\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\n\n\n\n\t\t\t_listen('destroy', function() {\n\t\t\t\tvar item;\n\t\t\t\tfor(var i = 0; i < _items.length; i++) {\n\t\t\t\t\titem = _items[i];\n\t\t\t\t\t// remove reference to DOM elements, for GC\n\t\t\t\t\tif(item.container) {\n\t\t\t\t\t\titem.container = null; \n\t\t\t\t\t}\n\t\t\t\t\tif(item.placeholder) {\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.img) {\n\t\t\t\t\t\titem.img = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.preloader) {\n\t\t\t\t\t\titem.preloader = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.loadError) {\n\t\t\t\t\t\titem.loaded = item.loadError = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_imagesToAppendPool = null;\n\t\t\t});\n\t\t},\n\n\n\t\tgetItemAt: function(index) {\n\t\t\tif (index >= 0) {\n\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tallowProgressiveImg: function() {\n\t\t\t// 1. Progressive image loading isn't working on webkit/blink \n\t\t\t//    when hw-acceleration (e.g. translateZ) is applied to IMG element.\n\t\t\t//    That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n\t\t\t//    \n\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n\t\t\t//    That's why it's disabled on touch devices (mainly because of swipe transition)\n\t\t\t//    \n\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n\t\t\t// Don't allow progressive loading on non-large touch devices\n\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200; \n\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n\t\t},\n\n\t\tsetContent: function(holder, index) {\n\n\t\t\tif(_options.loop) {\n\t\t\t\tindex = _getLoopedId(index);\n\t\t\t}\n\n\t\t\tvar prevItem = self.getItemAt(holder.index);\n\t\t\tif(prevItem) {\n\t\t\t\tprevItem.container = null;\n\t\t\t}\n\t\n\t\t\tvar item = self.getItemAt(index),\n\t\t\t\timg;\n\t\t\t\n\t\t\tif(!item) {\n\t\t\t\tholder.el.innerHTML = '';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// allow to override data\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tholder.index = index;\n\t\t\tholder.item = item;\n\n\t\t\t// base container DIV is created only once for each of 3 holders\n\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap'); \n\n\t\t\t\n\n\t\t\tif(!item.src && item.html) {\n\t\t\t\tif(item.html.tagName) {\n\t\t\t\t\tbaseDiv.appendChild(item.html);\n\t\t\t\t} else {\n\t\t\t\t\tbaseDiv.innerHTML = item.html;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_checkForError(item);\n\n\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\n\t\t\tif(item.src && !item.loadError && !item.loaded) {\n\n\t\t\t\titem.loadComplete = function(item) {\n\n\t\t\t\t\t// gallery closed before image finished loading\n\t\t\t\t\tif(!_isOpen) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if holder hasn't changed while image was loading\n\t\t\t\t\tif(holder && holder.index === index ) {\n\t\t\t\t\t\tif( _checkForError(item, true) ) {\n\t\t\t\t\t\t\titem.loadComplete = item.img = null;\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\n\n\t\t\t\t\t\t\tif(holder.index === _currentItemIndex) {\n\t\t\t\t\t\t\t\t// recalculate dimensions\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !item.imageAppended ) {\n\t\t\t\t\t\t\tif(_features.transform && (_mainScrollAnimating || _initialZoomRunning) ) {\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\t\t\titem:item,\n\t\t\t\t\t\t\t\t\tbaseDiv:baseDiv,\n\t\t\t\t\t\t\t\t\timg:item.img,\n\t\t\t\t\t\t\t\t\tindex:index,\n\t\t\t\t\t\t\t\t\tholder:holder,\n\t\t\t\t\t\t\t\t\tclearPlaceholder:true\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\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// remove preloader & mini-img\n\t\t\t\t\t\t\tif(!_initialZoomRunning && item.placeholder) {\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\t\t\titem.placeholder = null;\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\titem.loadComplete = null;\n\t\t\t\t\titem.img = null; // no need to store image element after it's added\n\n\t\t\t\t\t_shout('imageLoadComplete', index, item);\n\t\t\t\t};\n\n\t\t\t\tif(framework.features.transform) {\n\t\t\t\t\t\n\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder'; \n\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n\t\t\t\t\tif(item.msrc) {\n\t\t\t\t\t\tplaceholder.src = item.msrc;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t_setImageSize(item, placeholder);\n\n\t\t\t\t\tbaseDiv.appendChild(placeholder);\n\t\t\t\t\titem.placeholder = placeholder;\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\tif(!item.loading) {\n\t\t\t\t\t_preloadImage(item);\n\t\t\t\t}\n\n\n\t\t\t\tif( self.allowProgressiveImg() ) {\n\t\t\t\t\t// just append image\n\t\t\t\t\tif(!_initialContentSet && _features.transform) {\n\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\titem:item, \n\t\t\t\t\t\t\tbaseDiv:baseDiv, \n\t\t\t\t\t\t\timg:item.img, \n\t\t\t\t\t\t\tindex:index, \n\t\t\t\t\t\t\tholder:holder\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if(item.src && !item.loadError) {\n\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\n\t\t\t\timg = framework.createEl('pswp__img', 'img');\n\t\t\t\timg.style.opacity = 1;\n\t\t\t\timg.src = item.src;\n\t\t\t\t_setImageSize(item, img);\n\t\t\t\t_appendImage(index, item, baseDiv, img, true);\n\t\t\t}\n\t\t\t\n\n\t\t\tif(!_initialContentSet && index === _currentItemIndex) {\n\t\t\t\t_currZoomElementStyle = baseDiv.style;\n\t\t\t\t_showOrHide(item, (img ||item.img) );\n\t\t\t} else {\n\t\t\t\t_applyZoomPanToItem(item);\n\t\t\t}\n\n\t\t\tholder.el.innerHTML = '';\n\t\t\tholder.el.appendChild(baseDiv);\n\t\t},\n\n\t\tcleanSlide: function( item ) {\n\t\t\tif(item.img ) {\n\t\t\t\titem.img.onload = item.img.onerror = null;\n\t\t\t}\n\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\n\t\t}\n\n\t}\n});\n\n/*>>items-controller*/\n\n/*>>tap*/\n/**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n * \n */\n\nvar tapTimer,\n\ttapReleasePoint = {},\n\t_dispatchTapEvent = function(origEvent, releasePoint, pointerType) {\t\t\n\t\tvar e = document.createEvent( 'CustomEvent' ),\n\t\t\teDetail = {\n\t\t\t\torigEvent:origEvent, \n\t\t\t\ttarget:origEvent.target, \n\t\t\t\treleasePoint: releasePoint, \n\t\t\t\tpointerType:pointerType || 'touch'\n\t\t\t};\n\n\t\te.initCustomEvent( 'pswpTap', true, true, eDetail );\n\t\torigEvent.target.dispatchEvent(e);\n\t};\n\n_registerModule('Tap', {\n\tpublicMethods: {\n\t\tinitTap: function() {\n\t\t\t_listen('firstTouchStart', self.onTapStart);\n\t\t\t_listen('touchRelease', self.onTapRelease);\n\t\t\t_listen('destroy', function() {\n\t\t\t\ttapReleasePoint = {};\n\t\t\t\ttapTimer = null;\n\t\t\t});\n\t\t},\n\t\tonTapStart: function(touchList) {\n\t\t\tif(touchList.length > 1) {\n\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\ttapTimer = null;\n\t\t\t}\n\t\t},\n\t\tonTapRelease: function(e, releasePoint) {\n\t\t\tif(!releasePoint) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// https://github.com/andi34/PhotoSwipe/issues/13\n\t\t\tif(!_moved && !_isMultitouch && !_numAnimations && (!_pointerEventEnabled || self.container.contains(e.target))) {\n\t\t\t\tvar p0 = releasePoint;\n\t\t\t\tif(tapTimer) {\n\t\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\t\ttapTimer = null;\n\n\t\t\t\t\t// Check if taped on the same place\n\t\t\t\t\tif ( _isNearbyPoints(p0, tapReleasePoint) ) {\n\t\t\t\t\t\t_shout('doubleTap', p0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(releasePoint.type === 'mouse') {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\n\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\n\t\t\t\tif(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap') ) {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_equalizePoints(tapReleasePoint, p0);\n\n\t\t\t\ttapTimer = setTimeout(function() {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\ttapTimer = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\t}\n});\n\n/*>>tap*/\n\n/*>>desktop-zoom*/\n/**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n *   (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n * \n */\n\nvar _wheelDelta;\n\t\n_registerModule('DesktopZoom', {\n\n\tpublicMethods: {\n\n\t\tinitDesktopZoom: function() {\n\n\t\t\tif(_oldIE) {\n\t\t\t\t// no zoom for old IE (<=8)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_likelyTouchDevice) {\n\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\n\t\t\t\t// and only then apply desktop-zoom features\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\tself.setupDesktopZoom();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.setupDesktopZoom(true);\n\t\t\t}\n\n\t\t},\n\n\t\tsetupDesktopZoom: function(onInit) {\n\n\t\t\t_wheelDelta = {};\n\n\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\n\t\t\t\n\t\t\t_listen('bindEvents', function() {\n\t\t\t\tframework.bind(template, events,  self.handleMouseWheel);\n\t\t\t});\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_wheelDelta) {\n\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.mouseZoomedIn = false;\n\n\t\t\tvar hasDraggingClass,\n\t\t\t\tupdateZoomable = function() {\n\t\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\n\t\t\t\t\t\tself.mouseZoomedIn = false;\n\t\t\t\t\t}\n\t\t\t\t\tif(_currZoomLevel < 1) {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t}\n\t\t\t\t\tremoveDraggingClass();\n\t\t\t\t},\n\t\t\t\tremoveDraggingClass = function() {\n\t\t\t\t\tif(hasDraggingClass) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\n\t\t\t\t\t\thasDraggingClass = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t_listen('resize' , updateZoomable);\n\t\t\t_listen('afterChange' , updateZoomable);\n\t\t\t_listen('pointerDown', function() {\n\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\thasDraggingClass = true;\n\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('pointerUp', removeDraggingClass);\n\n\t\t\tif(!onInit) {\n\t\t\t\tupdateZoomable();\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\thandleMouseWheel: function(e) {\n\n\t\t\tif(_currZoomLevel <= self.currItem.fitRatio) {\n\t\t\t\tif( _options.modal ) {\n\n\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else if(_transformKey && Math.abs(e.deltaY) > 2) {\n\t\t\t\t\t\t// close PhotoSwipe\n\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\n\t\t\t\t\t\t_closedByScroll = true;\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// allow just one event to fire\n\t\t\te.stopPropagation();\n\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t\t\t_wheelDelta.x = 0;\n\n\t\t\tif('deltaX' in e) {\n\t\t\t\tif(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n\t\t\t\t\t// 18 - average line height\n\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\n\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.x = e.deltaX;\n\t\t\t\t\t_wheelDelta.y = e.deltaY;\n\t\t\t\t}\n\t\t\t} else if('wheelDelta' in e) {\n\t\t\t\tif(e.wheelDeltaX) {\n\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\n\t\t\t\t}\n\t\t\t\tif(e.wheelDeltaY) {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\n\t\t\t\t}\n\t\t\t} else if('detail' in e) {\n\t\t\t\t_wheelDelta.y = e.detail;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculatePanBounds(_currZoomLevel, true);\n\n\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\n\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\n\n\t\t\t// only prevent scrolling in nonmodal mode when not at edges\n\t\t\tif (_options.modal ||\n\t\t\t\t(\n\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n\t\t\t\t) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// TODO: use rAF instead of mousewheel?\n\t\t\tself.panTo(newPanX, newPanY);\n\t\t},\n\n\t\ttoggleDesktopZoom: function(centerPoint) {\n\t\t\tcenterPoint = centerPoint || {x:_viewportSize.x/2 + _offset.x, y:_viewportSize.y/2 + _offset.y };\n\n\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\n\t\t\t\n\t\t\tself.mouseZoomedIn = !zoomOut;\n\n\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n\t\t\tframework[ (!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n\t\t}\n\n\t}\n});\n\n\n/*>>desktop-zoom*/\n\n/*>>history*/\n/**\n *\n * history.js:\n *\n * - Back button to close gallery.\n * \n * - Unique URL for each slide: example.com/&pid=1&gid=3\n *   (where PID is picture index, and GID and gallery index)\n *   \n * - Switch URL when slides change.\n * \n */\n\n\nvar _historyDefaultOptions = {\n\thistory: true,\n\tgalleryUID: 1\n};\n\nvar _historyUpdateTimeout,\n\t_hashChangeTimeout,\n\t_hashAnimCheckTimeout,\n\t_hashChangedByScript,\n\t_hashChangedByHistory,\n\t_hashReseted,\n\t_initialHash,\n\t_historyChanged,\n\t_closedFromURL,\n\t_urlChangedOnce,\n\t_windowLoc,\n\n\t_supportsPushState,\n\n\t_getHash = function() {\n\t\treturn _windowLoc.hash.substring(1);\n\t},\n\t_cleanHistoryTimeouts = function() {\n\n\t\tif(_historyUpdateTimeout) {\n\t\t\tclearTimeout(_historyUpdateTimeout);\n\t\t}\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\t},\n\n\t// pid - Picture index\n\t// gid - Gallery index\n\t_parseItemIndexFromURL = function() {\n\t\tvar hash = _getHash(),\n\t\t\tparams = {};\n\n\t\tif(hash.length < 5) { // pid=1\n\t\t\treturn params;\n\t\t}\n\n\t\tvar i, vars = hash.split('&');\n\t\tfor (i = 0; i < vars.length; i++) {\n\t\t\tif(!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar pair = vars[i].split('=');\t\n\t\t\tif(pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\t\tif(_options.galleryPIDs) {\n\t\t\t// detect custom pid in hash and search for it among the items collection\n\t\t\tvar searchfor = params.pid;\n\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\n\t\t\tfor(i = 0; i < _items.length; i++) {\n\t\t\t\tif(_items[i].pid === searchfor) {\n\t\t\t\t\tparams.pid = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparams.pid = parseInt(params.pid,10)-1;\n\t\t}\n\t\tif( params.pid < 0 ) {\n\t\t\tparams.pid = 0;\n\t\t}\n\t\treturn params;\n\t},\n\t_updateHash = function() {\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\n\n\t\tif(_numAnimations || _isDragging) {\n\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n\t\t\t// that's why we update hash only when no animations running\n\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(_hashChangedByScript) {\n\t\t\tclearTimeout(_hashChangeTimeout);\n\t\t} else {\n\t\t\t_hashChangedByScript = true;\n\t\t}\n\n\n\t\tvar pid = (_currentItemIndex + 1);\n\t\tvar item = _getItemAt( _currentItemIndex );\n\t\tif(item.hasOwnProperty('pid')) {\n\t\t\t// carry forward any custom pid assigned to the item\n\t\t\tpid = item.pid;\n\t\t}\n\t\tvar newHash = _initialHash + '&'  +  'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n\n\t\tif(!_historyChanged) {\n\t\t\tif(_windowLoc.hash.indexOf(newHash) === -1) {\n\t\t\t\t_urlChangedOnce = true;\n\t\t\t}\n\t\t\t// first time - add new hisory record, then just replace\n\t\t}\n\n\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' +  newHash;\n\n\t\tif( _supportsPushState ) {\n\n\t\t\tif('#' + newHash !== window.location.hash) {\n\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif(_historyChanged) {\n\t\t\t\t_windowLoc.replace( newURL );\n\t\t\t} else {\n\t\t\t\t_windowLoc.hash = newHash;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\n\t\t_historyChanged = true;\n\t\t_hashChangeTimeout = setTimeout(function() {\n\t\t\t_hashChangedByScript = false;\n\t\t}, 60);\n\t};\n\n\n\n\t\n\n_registerModule('History', {\n\n\t\n\n\tpublicMethods: {\n\t\tinitHistory: function() {\n\n\t\t\tframework.extend(_options, _historyDefaultOptions, true);\n\n\t\t\tif( !_options.history ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t_windowLoc = window.location;\n\t\t\t_urlChangedOnce = false;\n\t\t\t_closedFromURL = false;\n\t\t\t_historyChanged = false;\n\t\t\t_initialHash = _getHash();\n\t\t\t_supportsPushState = ('pushState' in history);\n\n\n\t\t\tif(_initialHash.indexOf('gid=') > -1) {\n\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\n\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\n\t\t\t}\n\t\t\t\n\n\t\t\t_listen('afterChange', self.updateURL);\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\n\t\t\t});\n\n\n\t\t\tvar returnToOriginal = function() {\n\t\t\t\t_hashReseted = true;\n\t\t\t\tif(!_closedFromURL) {\n\n\t\t\t\t\tif(_urlChangedOnce) {\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif(_initialHash) {\n\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_supportsPushState) {\n\n\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\n\t\t\t\t\t\t\t\thistory.pushState('', document.title,  _windowLoc.pathname + _windowLoc.search );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_windowLoc.hash = '';\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\t\n\t\t\t\t}\n\n\t\t\t\t_cleanHistoryTimeouts();\n\t\t\t};\n\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_closedByScroll) {\n\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n\t\t\t\t\t// this is done to keep the scroll position\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('destroy', function() {\n\t\t\t\tif(!_hashReseted) {\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('firstUpdate', function() {\n\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\n\t\t\t});\n\n\t\t\t\n\n\t\t\t\n\t\t\tvar index = _initialHash.indexOf('pid=');\n\t\t\tif(index > -1) {\n\t\t\t\t_initialHash = _initialHash.substring(0, index);\n\t\t\t\tif(_initialHash.slice(-1) === '&') {\n\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(_isOpen) { // hasn't destroyed yet\n\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\n\t\t\t\t}\n\t\t\t}, 40);\n\t\t\t\n\t\t},\n\t\tonHashChange: function() {\n\n\t\t\tif(_getHash() === _initialHash) {\n\n\t\t\t\t_closedFromURL = true;\n\t\t\t\tself.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!_hashChangedByScript) {\n\n\t\t\t\t_hashChangedByHistory = true;\n\t\t\t\tself.goTo( _parseItemIndexFromURL().pid );\n\t\t\t\t_hashChangedByHistory = false;\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tupdateURL: function() {\n\n\t\t\t// Delay the update of URL, to avoid lag during transition, \n\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n\t\t\t\n\t\t\t_cleanHistoryTimeouts();\n\t\t\t\n\n\t\t\tif(_hashChangedByHistory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_historyChanged) {\n\t\t\t\t_updateHash(); // first time\n\t\t\t} else {\n\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\n\t\t\t}\n\t\t}\n\t\n\t}\n});\n\n\n/*>>history*/\n\tframework.extend(self, publicMethods); };\n","require('../../modules/es.array.iterator');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'values');\n","require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","require('../../modules/es.symbol');\nrequire('../../modules/es.object.assign');\nrequire('../../modules/es.object.create');\nrequire('../../modules/es.object.define-property');\nrequire('../../modules/es.object.define-properties');\nrequire('../../modules/es.object.entries');\nrequire('../../modules/es.object.freeze');\nrequire('../../modules/es.object.from-entries');\nrequire('../../modules/es.object.get-own-property-descriptor');\nrequire('../../modules/es.object.get-own-property-descriptors');\nrequire('../../modules/es.object.get-own-property-names');\nrequire('../../modules/es.object.get-prototype-of');\nrequire('../../modules/es.object.is');\nrequire('../../modules/es.object.is-extensible');\nrequire('../../modules/es.object.is-frozen');\nrequire('../../modules/es.object.is-sealed');\nrequire('../../modules/es.object.keys');\nrequire('../../modules/es.object.prevent-extensions');\nrequire('../../modules/es.object.seal');\nrequire('../../modules/es.object.set-prototype-of');\nrequire('../../modules/es.object.values');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.object.define-getter');\nrequire('../../modules/es.object.define-setter');\nrequire('../../modules/es.object.lookup-getter');\nrequire('../../modules/es.object.lookup-setter');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object;\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_OUT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push.call(target, value); // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push.call(target, value); // filterOut\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterOut` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterOut: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  var REPLACE = isForced(\n    CONSTRUCTOR_NAME,\n    typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n      new NativeConstructor().entries().next();\n    }))\n  );\n\n  if (REPLACE) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new -- required for testing\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\n\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n  return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    typeof (NewTarget = dummy.constructor) == 'function' &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + ++id, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar meta = module.exports = {\n  REQUIRED: false,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    metadata.facade = it;\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = false;\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = toLength(iterable.length); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && result instanceof Result) return result;\n      } return new Result(false);\n    }\n    iterator = iterFn.call(iterable);\n  }\n\n  next = iterator.next;\n  while (!(step = next.call(iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator);\n      throw error;\n    }\n    if (typeof result == 'object' && result && result instanceof Result) return result;\n  } return new Result(false);\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n  var returnMethod = iterator['return'];\n  if (returnMethod !== undefined) {\n    return anObject(returnMethod.call(iterator)).value;\n  }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // eslint-disable-next-line es/no-symbol -- required for testing\n  return !Symbol.sham &&\n    // Chrome 38 Symbol has incorrect toString conversion\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    (IS_NODE ? V8_VERSION === 38 : V8_VERSION > 37 && V8_VERSION < 41);\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line es/no-symbol -- safe\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject -- old IE */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return $getOwnPropertyNames(it);\n  } catch (error) {\n    return windowNames.slice();\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\n\n// Forced replacement object prototype accessors methods\nmodule.exports = IS_PURE || !fails(function () {\n  var key = Math.random();\n  // In FF throws only define methods\n  // eslint-disable-next-line no-undef, no-useless-call -- required for testing\n  __defineSetter__.call(null, key, function () { /* empty */ });\n  delete global[key];\n});\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var state;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) {\n      createNonEnumerableProperty(value, 'name', key);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.10.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  create: create\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar aFunction = require('../internals/a-function');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__\nif (DESCRIPTORS) {\n  $({ target: 'Object', proto: true, forced: FORCED }, {\n    __defineGetter__: function __defineGetter__(P, getter) {\n      definePropertyModule.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n    }\n  });\n}\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n  defineProperties: defineProperties\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModile = require('../internals/object-define-property');\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n  defineProperty: objectDefinePropertyModile.f\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar aFunction = require('../internals/a-function');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__\nif (DESCRIPTORS) {\n  $({ target: 'Object', proto: true, forced: FORCED }, {\n    __defineSetter__: function __defineSetter__(P, setter) {\n      definePropertyModule.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n    }\n  });\n}\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  freeze: function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n  }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n  fromEntries: function fromEntries(iterable) {\n    var obj = {};\n    iterate(iterable, function (k, v) {\n      createProperty(obj, k, v);\n    }, { AS_ENTRIES: true });\n    return obj;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  getOwnPropertyNames: getOwnPropertyNames\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  isExtensible: function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar $isFrozen = Object.isFrozen;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isFrozen(1); });\n\n// `Object.isFrozen` method\n// https://tc39.es/ecma262/#sec-object.isfrozen\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  isFrozen: function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar $isSealed = Object.isSealed;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isSealed(1); });\n\n// `Object.isSealed` method\n// https://tc39.es/ecma262/#sec-object.issealed\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  isSealed: function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  }\n});\n","var $ = require('../internals/export');\nvar is = require('../internals/same-value');\n\n// `Object.is` method\n// https://tc39.es/ecma262/#sec-object.is\n$({ target: 'Object', stat: true }, {\n  is: is\n});\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__\nif (DESCRIPTORS) {\n  $({ target: 'Object', proto: true, forced: FORCED }, {\n    __lookupGetter__: function __lookupGetter__(P) {\n      var O = toObject(this);\n      var key = toPrimitive(P, true);\n      var desc;\n      do {\n        if (desc = getOwnPropertyDescriptor(O, key)) return desc.get;\n      } while (O = getPrototypeOf(O));\n    }\n  });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__\nif (DESCRIPTORS) {\n  $({ target: 'Object', proto: true, forced: FORCED }, {\n    __lookupSetter__: function __lookupSetter__(P) {\n      var O = toObject(this);\n      var key = toPrimitive(P, true);\n      var desc;\n      do {\n        if (desc = getOwnPropertyDescriptor(O, key)) return desc.set;\n      } while (O = getPrototypeOf(O));\n    }\n  });\n}\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-preventextensions -- safe\nvar $preventExtensions = Object.preventExtensions;\nvar FAILS_ON_PRIMITIVES = fails(function () { $preventExtensions(1); });\n\n// `Object.preventExtensions` method\n// https://tc39.es/ecma262/#sec-object.preventextensions\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  preventExtensions: function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(onFreeze(it)) : it;\n  }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-seal -- safe\nvar $seal = Object.seal;\nvar FAILS_ON_PRIMITIVES = fails(function () { $seal(1); });\n\n// `Object.seal` method\n// https://tc39.es/ecma262/#sec-object.seal\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  seal: function seal(it) {\n    return $seal && isObject(it) ? $seal(onFreeze(it)) : it;\n  }\n});\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n  setPrototypeOf: setPrototypeOf\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n$({ global: true }, { Reflect: {} });\n\n// Reflect[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-reflect-@@tostringtag\nsetToStringTag(global.Reflect, 'Reflect', true);\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var result = this instanceof SymbolWrapper\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n  symbolPrototype.constructor = SymbolWrapper;\n\n  var symbolToString = symbolPrototype.toString;\n  var native = String(NativeSymbol('test')) == 'Symbol(test)';\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  defineProperty(symbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = isObject(this) ? this.valueOf() : this;\n      var string = symbolToString.call(symbol);\n      if (has(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPrimitive(P, true);\n  anObject(Attributes);\n  if (has(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPrimitive(V, true);\n  var enumerable = nativePropertyIsEnumerable.call(this, P);\n  if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPrimitive(P, true);\n  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n      result.push(AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.es/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = String(key);\n    if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.es/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.es/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.es/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.es/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = [it];\n      var index = 1;\n      var $replacer;\n      while (arguments.length > index) args.push(arguments[index++]);\n      $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return $stringify.apply(null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n  createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  try {\n    var ce = new window.CustomEvent('test', { cancelable: true });\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n      // IE has problems with .preventDefault() on custom events\n      // http://stackoverflow.com/questions/23349191\n      throw new Error('Could not prevent default');\n    }\n  } catch (e) {\n    var CustomEvent = function(event, params) {\n      var evt, origPrevent;\n      params = params || {};\n      params.bubbles = !!params.bubbles;\n      params.cancelable = !!params.cancelable;\n\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(\n        event,\n        params.bubbles,\n        params.cancelable,\n        params.detail\n      );\n      origPrevent = evt.preventDefault;\n      evt.preventDefault = function() {\n        origPrevent.call(this);\n        try {\n          Object.defineProperty(this, 'defaultPrevented', {\n            get: function() {\n              return true;\n            }\n          });\n        } catch (e) {\n          this.defaultPrevented = true;\n        }\n      };\n      return evt;\n    };\n\n    CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = CustomEvent; // expose definition to window\n  }\n})();\n","export default class Polyfill {\r\n    static removeHtmlElementNode(element:any) {\r\n            if (element.parentNode !== null)\r\n                element.parentNode.removeChild(element);\r\n    }\r\n\r\n    static createNewEvent(eventName:string, data:any) {\r\n        let event = null;\r\n\r\n        if(typeof(CustomEvent) === 'function') {\r\n            event = new CustomEvent(eventName, {detail: data});\r\n        }else{\r\n            event = document.createEvent('Event');\r\n            event.initEvent(eventName, true, true);\r\n            // @ts-ignore\r\n            event.detail = data;\r\n        }\r\n        return event;\r\n    }\r\n}\r\n","var global =\n  (typeof globalThis !== 'undefined' && globalThis) ||\n  (typeof self !== 'undefined' && self) ||\n  (typeof global !== 'undefined' && global)\n\nvar support = {\n  searchParams: 'URLSearchParams' in global,\n  iterable: 'Symbol' in global && 'iterator' in Symbol,\n  blob:\n    'FileReader' in global &&\n    'Blob' in global &&\n    (function() {\n      try {\n        new Blob()\n        return true\n      } catch (e) {\n        return false\n      }\n    })(),\n  formData: 'FormData' in global,\n  arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n  return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n  var viewClasses = [\n    '[object Int8Array]',\n    '[object Uint8Array]',\n    '[object Uint8ClampedArray]',\n    '[object Int16Array]',\n    '[object Uint16Array]',\n    '[object Int32Array]',\n    '[object Uint32Array]',\n    '[object Float32Array]',\n    '[object Float64Array]'\n  ]\n\n  var isArrayBufferView =\n    ArrayBuffer.isView ||\n    function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n}\n\nfunction normalizeName(name) {\n  if (typeof name !== 'string') {\n    name = String(name)\n  }\n  if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n    throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n  }\n  return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n  if (typeof value !== 'string') {\n    value = String(value)\n  }\n  return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n  var iterator = {\n    next: function() {\n      var value = items.shift()\n      return {done: value === undefined, value: value}\n    }\n  }\n\n  if (support.iterable) {\n    iterator[Symbol.iterator] = function() {\n      return iterator\n    }\n  }\n\n  return iterator\n}\n\nexport function Headers(headers) {\n  this.map = {}\n\n  if (headers instanceof Headers) {\n    headers.forEach(function(value, name) {\n      this.append(name, value)\n    }, this)\n  } else if (Array.isArray(headers)) {\n    headers.forEach(function(header) {\n      this.append(header[0], header[1])\n    }, this)\n  } else if (headers) {\n    Object.getOwnPropertyNames(headers).forEach(function(name) {\n      this.append(name, headers[name])\n    }, this)\n  }\n}\n\nHeaders.prototype.append = function(name, value) {\n  name = normalizeName(name)\n  value = normalizeValue(value)\n  var oldValue = this.map[name]\n  this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n  delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n  name = normalizeName(name)\n  return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n  return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n  this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n  for (var name in this.map) {\n    if (this.map.hasOwnProperty(name)) {\n      callback.call(thisArg, this.map[name], name, this)\n    }\n  }\n}\n\nHeaders.prototype.keys = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push(name)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n  var items = []\n  this.forEach(function(value) {\n    items.push(value)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push([name, value])\n  })\n  return iteratorFor(items)\n}\n\nif (support.iterable) {\n  Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n  if (body.bodyUsed) {\n    return Promise.reject(new TypeError('Already read'))\n  }\n  body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n  return new Promise(function(resolve, reject) {\n    reader.onload = function() {\n      resolve(reader.result)\n    }\n    reader.onerror = function() {\n      reject(reader.error)\n    }\n  })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsArrayBuffer(blob)\n  return promise\n}\n\nfunction readBlobAsText(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsText(blob)\n  return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n  var view = new Uint8Array(buf)\n  var chars = new Array(view.length)\n\n  for (var i = 0; i < view.length; i++) {\n    chars[i] = String.fromCharCode(view[i])\n  }\n  return chars.join('')\n}\n\nfunction bufferClone(buf) {\n  if (buf.slice) {\n    return buf.slice(0)\n  } else {\n    var view = new Uint8Array(buf.byteLength)\n    view.set(new Uint8Array(buf))\n    return view.buffer\n  }\n}\n\nfunction Body() {\n  this.bodyUsed = false\n\n  this._initBody = function(body) {\n    /*\n      fetch-mock wraps the Response object in an ES6 Proxy to\n      provide useful test harness features such as flush. However, on\n      ES5 browsers without fetch or Proxy support pollyfills must be used;\n      the proxy-pollyfill is unable to proxy an attribute unless it exists\n      on the object before the Proxy is created. This change ensures\n      Response.bodyUsed exists on the instance, while maintaining the\n      semantic of setting Request.bodyUsed in the constructor before\n      _initBody is called.\n    */\n    this.bodyUsed = this.bodyUsed\n    this._bodyInit = body\n    if (!body) {\n      this._bodyText = ''\n    } else if (typeof body === 'string') {\n      this._bodyText = body\n    } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n      this._bodyBlob = body\n    } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n      this._bodyFormData = body\n    } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n      this._bodyText = body.toString()\n    } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n      this._bodyArrayBuffer = bufferClone(body.buffer)\n      // IE 10-11 can't handle a DataView body.\n      this._bodyInit = new Blob([this._bodyArrayBuffer])\n    } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n      this._bodyArrayBuffer = bufferClone(body)\n    } else {\n      this._bodyText = body = Object.prototype.toString.call(body)\n    }\n\n    if (!this.headers.get('content-type')) {\n      if (typeof body === 'string') {\n        this.headers.set('content-type', 'text/plain;charset=UTF-8')\n      } else if (this._bodyBlob && this._bodyBlob.type) {\n        this.headers.set('content-type', this._bodyBlob.type)\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n      }\n    }\n  }\n\n  if (support.blob) {\n    this.blob = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return Promise.resolve(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as blob')\n      } else {\n        return Promise.resolve(new Blob([this._bodyText]))\n      }\n    }\n\n    this.arrayBuffer = function() {\n      if (this._bodyArrayBuffer) {\n        var isConsumed = consumed(this)\n        if (isConsumed) {\n          return isConsumed\n        }\n        if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n          return Promise.resolve(\n            this._bodyArrayBuffer.buffer.slice(\n              this._bodyArrayBuffer.byteOffset,\n              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n            )\n          )\n        } else {\n          return Promise.resolve(this._bodyArrayBuffer)\n        }\n      } else {\n        return this.blob().then(readBlobAsArrayBuffer)\n      }\n    }\n  }\n\n  this.text = function() {\n    var rejected = consumed(this)\n    if (rejected) {\n      return rejected\n    }\n\n    if (this._bodyBlob) {\n      return readBlobAsText(this._bodyBlob)\n    } else if (this._bodyArrayBuffer) {\n      return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n    } else if (this._bodyFormData) {\n      throw new Error('could not read FormData body as text')\n    } else {\n      return Promise.resolve(this._bodyText)\n    }\n  }\n\n  if (support.formData) {\n    this.formData = function() {\n      return this.text().then(decode)\n    }\n  }\n\n  this.json = function() {\n    return this.text().then(JSON.parse)\n  }\n\n  return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n  var upcased = method.toUpperCase()\n  return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n  if (!(this instanceof Request)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n\n  options = options || {}\n  var body = options.body\n\n  if (input instanceof Request) {\n    if (input.bodyUsed) {\n      throw new TypeError('Already read')\n    }\n    this.url = input.url\n    this.credentials = input.credentials\n    if (!options.headers) {\n      this.headers = new Headers(input.headers)\n    }\n    this.method = input.method\n    this.mode = input.mode\n    this.signal = input.signal\n    if (!body && input._bodyInit != null) {\n      body = input._bodyInit\n      input.bodyUsed = true\n    }\n  } else {\n    this.url = String(input)\n  }\n\n  this.credentials = options.credentials || this.credentials || 'same-origin'\n  if (options.headers || !this.headers) {\n    this.headers = new Headers(options.headers)\n  }\n  this.method = normalizeMethod(options.method || this.method || 'GET')\n  this.mode = options.mode || this.mode || null\n  this.signal = options.signal || this.signal\n  this.referrer = null\n\n  if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n    throw new TypeError('Body not allowed for GET or HEAD requests')\n  }\n  this._initBody(body)\n\n  if (this.method === 'GET' || this.method === 'HEAD') {\n    if (options.cache === 'no-store' || options.cache === 'no-cache') {\n      // Search for a '_' parameter in the query string\n      var reParamSearch = /([?&])_=[^&]*/\n      if (reParamSearch.test(this.url)) {\n        // If it already exists then set the value with the current time\n        this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n      } else {\n        // Otherwise add a new '_' parameter to the end with the current time\n        var reQueryString = /\\?/\n        this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n      }\n    }\n  }\n}\n\nRequest.prototype.clone = function() {\n  return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n  var form = new FormData()\n  body\n    .trim()\n    .split('&')\n    .forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n  return form\n}\n\nfunction parseHeaders(rawHeaders) {\n  var headers = new Headers()\n  // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n  // https://tools.ietf.org/html/rfc7230#section-3.2\n  var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n  // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n  // https://github.com/github/fetch/issues/748\n  // https://github.com/zloirock/core-js/issues/751\n  preProcessedHeaders\n    .split('\\r')\n    .map(function(header) {\n      return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n    })\n    .forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n  return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n  if (!(this instanceof Response)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n  if (!options) {\n    options = {}\n  }\n\n  this.type = 'default'\n  this.status = options.status === undefined ? 200 : options.status\n  this.ok = this.status >= 200 && this.status < 300\n  this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n  this.headers = new Headers(options.headers)\n  this.url = options.url || ''\n  this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n  return new Response(this._bodyInit, {\n    status: this.status,\n    statusText: this.statusText,\n    headers: new Headers(this.headers),\n    url: this.url\n  })\n}\n\nResponse.error = function() {\n  var response = new Response(null, {status: 0, statusText: ''})\n  response.type = 'error'\n  return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n  if (redirectStatuses.indexOf(status) === -1) {\n    throw new RangeError('Invalid status code')\n  }\n\n  return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n  new DOMException()\n} catch (err) {\n  DOMException = function(message, name) {\n    this.message = message\n    this.name = name\n    var error = Error(message)\n    this.stack = error.stack\n  }\n  DOMException.prototype = Object.create(Error.prototype)\n  DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n  return new Promise(function(resolve, reject) {\n    var request = new Request(input, init)\n\n    if (request.signal && request.signal.aborted) {\n      return reject(new DOMException('Aborted', 'AbortError'))\n    }\n\n    var xhr = new XMLHttpRequest()\n\n    function abortXhr() {\n      xhr.abort()\n    }\n\n    xhr.onload = function() {\n      var options = {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n      }\n      options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n      var body = 'response' in xhr ? xhr.response : xhr.responseText\n      setTimeout(function() {\n        resolve(new Response(body, options))\n      }, 0)\n    }\n\n    xhr.onerror = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.ontimeout = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.onabort = function() {\n      setTimeout(function() {\n        reject(new DOMException('Aborted', 'AbortError'))\n      }, 0)\n    }\n\n    function fixUrl(url) {\n      try {\n        return url === '' && global.location.href ? global.location.href : url\n      } catch (e) {\n        return url\n      }\n    }\n\n    xhr.open(request.method, fixUrl(request.url), true)\n\n    if (request.credentials === 'include') {\n      xhr.withCredentials = true\n    } else if (request.credentials === 'omit') {\n      xhr.withCredentials = false\n    }\n\n    if ('responseType' in xhr) {\n      if (support.blob) {\n        xhr.responseType = 'blob'\n      } else if (\n        support.arrayBuffer &&\n        request.headers.get('Content-Type') &&\n        request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n      ) {\n        xhr.responseType = 'arraybuffer'\n      }\n    }\n\n    if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n      Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n        xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n      })\n    } else {\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n    }\n\n    if (request.signal) {\n      request.signal.addEventListener('abort', abortXhr)\n\n      xhr.onreadystatechange = function() {\n        // DONE (success or failure)\n        if (xhr.readyState === 4) {\n          request.signal.removeEventListener('abort', abortXhr)\n        }\n      }\n    }\n\n    xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n  })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n  global.fetch = fetch\n  global.Headers = Headers\n  global.Request = Request\n  global.Response = Response\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module\n__webpack_require__(\"./eventgallery.js\");\n// This entry module used 'exports' so it can't be inlined\n"],"sourceRoot":""}

Copyright © 2019 by b0y-101