{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/when-dom-ready/dist/index.es2015.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/tiny-slider/src/helpers/raf.js","webpack:///./node_modules/tiny-slider/src/helpers/caf.js","webpack:///./node_modules/tiny-slider/src/helpers/extend.js","webpack:///./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///./node_modules/tiny-slider/src/helpers/getBody.js","webpack:///./node_modules/tiny-slider/src/helpers/docElement.js","webpack:///./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///./node_modules/tiny-slider/src/helpers/forEach.js","webpack:///./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///./node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///./node_modules/tiny-slider/src/helpers/addClass.js","webpack:///./node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///./node_modules/tiny-slider/src/helpers/showElement.js","webpack:///./node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///./node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/events.js","webpack:///./node_modules/tiny-slider/src/tiny-slider.js","webpack:///./node_modules/tiny-slider/src/helpers/calc.js","webpack:///./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/toDegree.js","webpack:///./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/@netc/aos/dist/esm/index.js","webpack:///./node_modules/tiny-slider/src/helpers/Object.keys.js","webpack:///./node_modules/tiny-slider/src/helpers/childNode.remove.js"],"names":["$at","String","iterated","this","_t","_i","point","O","index","length","value","undefined","done","ctx","$export","toObject","call","isArrayIter","toLength","createProperty","getIterFn","S","F","iter","Array","from","arrayLike","result","step","iterator","C","aLen","arguments","mapfn","mapping","iterFn","next","$find","forced","P","find","callbackfn","toInteger","defined","module","exports","TO_STRING","that","pos","a","b","s","i","l","charCodeAt","charAt","slice","loadedStates","whenDomReady","cb","doc","Promise","resolve","window","document","setTimeout","indexOf","readyState","addEventListener","resume","val","then","anObject","fn","entries","e","ret","Iterators","ITERATOR","ArrayProto","prototype","it","classof","getIteratorMethod","SAFE_CLOSING","riter","exec","skipClosing","safe","arr","IObject","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","$this","res","self","f","push","redefine","target","src","key","Constructor","name","forbiddenField","TypeError","BREAK","RETURN","iterable","strong","validate","get","entry","getEntry","v","set","def","isObject","speciesConstructor","original","isArray","SPECIES","constructor","setPrototypeOf","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","copy","checkStorageValue","JSON","parse","setLocalStorage","storage","access","setItem","getBody","body","createElement","fake","docElement","documentElement","setFakeBody","docOverflow","style","overflow","background","appendChild","resetFakeBody","remove","offsetHeight","addCSSRule","sheet","selector","rules","insertRule","addRule","getCssRulesLength","cssRules","forEach","callback","scope","classListSupport","hasClass","el","str","classList","contains","className","addClass","add","removeClass","replace","hasAttr","attr","hasAttribute","getAttr","getAttribute","isNodeList","item","setAttrs","els","attrs","Object","toString","setAttribute","removeAttrs","attrLength","j","removeAttribute","arrayFromNodeList","nl","hideElement","forceHide","display","showElement","isVisible","getComputedStyle","whichProperty","props","Props","toUpperCase","substr","prefix","prop","getEndProperty","propIn","propOut","endProp","test","toLowerCase","supportsPassive","defineProperty","passiveOption","passive","addEvents","preventScrolling","option","removeEvents","removeEventListener","Events","topics","on","eventName","off","splice","emit","data","type","tns","options","container","mode","axis","items","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","center","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","loop","rewind","autoHeight","responsive","lazyload","lazyloadSelector","touch","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","win","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","Date","localStorage","getItem","removeItem","CALC","div","vals","width","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","innerHTML","Math","abs","getBoundingClientRect","left","children","count","percentageLayout","CSSMQ","position","rule","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","insertBefore","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","console","warn","tnsList","optionsElements","querySelector","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","parentNode","containerHTML","outerHTML","slideItems","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","itemsMax","media","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","ceil","min","apply","max","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","events","newContainerClasses","slideId","tnsId","disable","disabled","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","keyCode","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","imgCompleteClass","imgEvents","imgLoaded","img","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","x","y","resetVariblesWhenDisable","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneNode","firstChild","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","update_carousel_transition_duration","parseInt","opts","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","element","postfix","to","duration","tick","unit","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","onResize","toggleAutoplay","clearInterval","htmlList","prevEl","previousElementSibling","parentEl","nextElementSibling","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","innerWidth","clientWidth","getInsertPosition","gap","getClientWidth","rect","right","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","querySelectorAll","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","toFixed","initSliderTransformCore","setSlidePositions","updateSlideStatus","insertAdjacentHTML","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","height","html","len","updateLiveRegion","updateGallerySlidePositions","autoheightTem","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","parseFloat","cell","stopPropagation","srcset","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","event","propertyName","targetIndex","indexGap","isNaN","factor","dir","passEventObject","targetIn","setInterval","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","preventDefault","returnValue","getMoveDirectionExpected","angle","atan2","PI","direction","$","clientX","clientY","panUpdate","err","dist","preventClick","indexMoved","moved","rough","displayIndex","global","dP","DESCRIPTORS","KEY","configurable","redefineAll","anInstance","forOf","$iterDefine","setSpecies","fastKey","SIZE","_f","n","k","getConstructor","NAME","ADDER","_l","clear","r","p","prev","has","setStrong","kind","_k","meta","fails","$iterDetect","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","Base","proto","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","NEED","G","W","defaultSettings","animationAttibute","reverseAttribute","thresholdAttribute","groupBy","array","expression","map","Map","collection","AOS","settings","defaultOptions","threshold","rootMargin","createObserver","elements","observer","IntersectionObserver","handleEntries","observe","cssClass","reverse","isIntersecting","groupedElements","keys","object","hasOwnProperty","Element","removeChild"],"mappings":"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","file":"vendors~components-15b33e0dded6eb7c0ed8.js","sourcesContent":["'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","/* eslint no-void: \"off\" */\n\n// Loaded ready states\nvar loadedStates = ['interactive', 'complete'];\n\n// Return Promise\nvar whenDomReady = function whenDomReady(cb, doc) {\n\treturn new Promise(function (resolve) {\n\t\t// Allow doc to be passed in as the lone first param\n\t\tif (cb && typeof cb !== 'function') {\n\t\t\tdoc = cb;\n\t\t\tcb = null;\n\t\t}\n\n\t\t// Use global document if we don't have one\n\t\tdoc = doc || window.document;\n\n\t\t// Handle DOM load\n\t\tvar done = function done() {\n\t\t\treturn resolve(void (cb && setTimeout(cb)));\n\t\t};\n\n\t\t// Resolve now if DOM has already loaded\n\t\t// Otherwise wait for DOMContentLoaded\n\t\tif (loadedStates.indexOf(doc.readyState) !== -1) {\n\t\t\tdone();\n\t\t} else {\n\t\t\tdoc.addEventListener('DOMContentLoaded', done);\n\t\t}\n\t});\n};\n\n// Promise chain helper\nwhenDomReady.resume = function (doc) {\n\treturn function (val) {\n\t\treturn whenDomReady(doc).then(function () {\n\t\t\treturn val;\n\t\t});\n\t};\n};\n\nexport default whenDomReady;\n//# sourceMappingURL=index.es2015.js.map\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n  || win.webkitRequestAnimationFrame\n  || win.mozRequestAnimationFrame\n  || win.msRequestAnimationFrame\n  || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n  || win.mozCancelAnimationFrame\n  || function(id){ clearTimeout(id); };\n","export function extend() {\n  var obj, name, copy,\n      target = arguments[0] || {},\n      i = 1,\n      length = arguments.length;\n\n  for (; i < length; i++) {\n    if ((obj = arguments[i]) !== null) {\n      for (name in obj) {\n        copy = obj[name];\n\n        if (target === copy) {\n          continue;\n        } else if (copy !== undefined) {\n          target[name] = copy;\n        }\n      }\n    }\n  }\n  return target;\n}","export function checkStorageValue (value) {\n  return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n  if (access) {\n    try { storage.setItem(key, value); } catch (e) {}\n  }\n  return value;\n}","export function getBody () {\n  var doc = document,\n      body = doc.body;\n\n  if (!body) {\n    body = doc.createElement('body');\n    body.fake = true;\n  }\n\n  return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n  var docOverflow = '';\n  if (body.fake) {\n    docOverflow = docElement.style.overflow;\n    //avoid crashing IE8, if background image is used\n    body.style.background = '';\n    //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n    body.style.overflow = docElement.style.overflow = 'hidden';\n    docElement.appendChild(body);\n  }\n\n  return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n  if (body.fake) {\n    body.remove();\n    docElement.style.overflow = docOverflow;\n    // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n    // eslint-disable-next-line\n    docElement.offsetHeight;\n  }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n  // return raf(function() {\n    'insertRule' in sheet ?\n      sheet.insertRule(selector + '{' + rules + '}', index) :\n      sheet.addRule(selector, rules, index);\n  // });\n}","export function getCssRulesLength(sheet) {\n  var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n  return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n  for (var i = 0, l = arr.length; i < l; i++) {\n    callback.call(scope, arr[i], i);\n  }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n    function (el, str) { return el.classList.contains(str); } :\n    function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n    function (el, str) {\n      if (!hasClass(el,  str)) { el.classList.add(str); }\n    } :\n    function (el, str) {\n      if (!hasClass(el,  str)) { el.className += ' ' + str; }\n    };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n    function (el, str) {\n      if (hasClass(el,  str)) { el.classList.remove(str); }\n    } :\n    function (el, str) {\n      if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n    };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n  return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n  return el.getAttribute(attr);\n}","export function isNodeList(el) {\n  // Only NodeList has the \"item()\" function\n  return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n  els = (isNodeList(els) || els instanceof Array) ? els : [els];\n  if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n  for (var i = els.length; i--;) {\n    for(var key in attrs) {\n      els[i].setAttribute(key, attrs[key]);\n    }\n  }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n  els = (isNodeList(els) || els instanceof Array) ? els : [els];\n  attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n  var attrLength = attrs.length;\n  for (var i = els.length; i--;) {\n    for (var j = attrLength; j--;) {\n      els[i].removeAttribute(attrs[j]);\n    }\n  }\n}","export function arrayFromNodeList (nl) {\n  var arr = [];\n  for (var i = 0, l = nl.length; i < l; i++) {\n    arr.push(nl[i]);\n  }\n  return arr;\n}","export function hideElement(el, forceHide) {\n  if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n  if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n  return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n  if (typeof props === 'string') {\n    var arr = [props],\n        Props = props.charAt(0).toUpperCase() + props.substr(1),\n        prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n        \n    prefixes.forEach(function(prefix) {\n      if (prefix !== 'ms' || props === 'transform') {\n        arr.push(prefix + Props);\n      }\n    });\n\n    props = arr;\n  }\n\n  var el = document.createElement('fakeelement'),\n      len = props.length;\n  for(var i = 0; i < props.length; i++){\n    var prop = props[i];\n    if( el.style[prop] !== undefined ){ return prop; }\n  }\n\n  return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n  var endProp = false;\n  if (/^Webkit/.test(propIn)) {\n    endProp = 'webkit' + propOut + 'End';\n  } else if (/^O/.test(propIn)) {\n    endProp = 'o' + propOut + 'End';\n  } else if (propIn) {\n    endProp = propOut.toLowerCase() + 'end';\n  }\n  return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function() {\n      supportsPassive = true;\n    }\n  });\n  window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n  for (var prop in obj) {\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n    el.addEventListener(prop, obj[prop], option);\n  }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n  for (var prop in obj) {\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n    el.removeEventListener(prop, obj[prop], option);\n  }\n}","export function Events() {\n  return {\n    topics: {},\n    on: function (eventName, fn) {\n      this.topics[eventName] = this.topics[eventName] || [];\n      this.topics[eventName].push(fn);\n    },\n    off: function(eventName, fn) {\n      if (this.topics[eventName]) {\n        for (var i = 0; i < this.topics[eventName].length; i++) {\n          if (this.topics[eventName][i] === fn) {\n            this.topics[eventName].splice(i, 1);\n            break;\n          }\n        }\n      }\n    },\n    emit: function (eventName, data) {\n      data.type = eventName;\n      if (this.topics[eventName]) {\n        this.topics[eventName].forEach(function(fn) {\n          fn(data, eventName);\n        });\n      }\n    }\n  };\n};","import './helpers/Object.keys';\nimport './helpers/childNode.remove';\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n  options = extend({\n    container: '.slider',\n    mode: 'carousel',\n    axis: 'horizontal',\n    items: 1,\n    gutter: 0,\n    edgePadding: 0,\n    fixedWidth: false,\n    autoWidth: false,\n    viewportMax: false,\n    slideBy: 1,\n    center: false,\n    controls: true,\n    controlsPosition: 'top',\n    controlsText: ['prev', 'next'],\n    controlsContainer: false,\n    prevButton: false,\n    nextButton: false,\n    nav: true,\n    navPosition: 'top',\n    navContainer: false,\n    navAsThumbnails: false,\n    arrowKeys: false,\n    speed: 300,\n    autoplay: false,\n    autoplayPosition: 'top',\n    autoplayTimeout: 5000,\n    autoplayDirection: 'forward',\n    autoplayText: ['start', 'stop'],\n    autoplayHoverPause: false,\n    autoplayButton: false,\n    autoplayButtonOutput: true,\n    autoplayResetOnVisibility: true,\n    animateIn: 'tns-fadeIn',\n    animateOut: 'tns-fadeOut',\n    animateNormal: 'tns-normal',\n    animateDelay: false,\n    loop: true,\n    rewind: false,\n    autoHeight: false,\n    responsive: false,\n    lazyload: false,\n    lazyloadSelector: '.tns-lazy-img',\n    touch: true,\n    mouseDrag: false,\n    swipeAngle: 15,\n    nested: false,\n    preventActionWhenRunning: false,\n    preventScrollOnTouch: false,\n    freezable: true,\n    onInit: false,\n    useLocalStorage: true\n  }, options || {});\n  \n  var doc = document,\n      win = window,\n      KEYS = {\n        ENTER: 13,\n        SPACE: 32,\n        LEFT: 37,\n        RIGHT: 39\n      },\n      tnsStorage = {},\n      localStorageAccess = options.useLocalStorage;\n\n  if (localStorageAccess) {\n    // check browser version and local storage access\n    var browserInfo = navigator.userAgent;\n    var uid = new Date;\n\n    try {\n      tnsStorage = win.localStorage;\n      if (tnsStorage) {\n        tnsStorage.setItem(uid, uid);\n        localStorageAccess = tnsStorage.getItem(uid) == uid;\n        tnsStorage.removeItem(uid);\n      } else {\n        localStorageAccess = false;\n      }\n      if (!localStorageAccess) { tnsStorage = {}; }\n    } catch(e) {\n      localStorageAccess = false;\n    }\n\n    if (localStorageAccess) {\n      // remove storage when browser version changes\n      if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n        ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n      }\n      // update browserInfo\n      localStorage['tnsApp'] = browserInfo;\n    }\n  }\n\n  var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n      PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n      CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n      TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n      HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n      TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n      TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n      ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n      ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n      TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n      ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n  // get element nodes from selectors\n  var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n      tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'], \n      optionsElements = {};\n      \n  tnsList.forEach(function(item) {\n    if (typeof options[item] === 'string') {\n      var str = options[item],\n          el = doc.querySelector(str);\n      optionsElements[item] = str;\n\n      if (el && el.nodeName) {\n        options[item] = el;\n      } else {\n        if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n        return;\n      }\n    }\n  });\n\n  // make sure at least 1 slide\n  if (options.container.children.length < 1) {\n    if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n    return;\n   }\n\n  // update options\n  var responsive = options.responsive,\n      nested = options.nested,\n      carousel = options.mode === 'carousel' ? true : false;\n\n  if (responsive) {\n    // apply responsive[0] to options and remove it\n    if (0 in responsive) {\n      options = extend(options, responsive[0]);\n      delete responsive[0];\n    }\n\n    var responsiveTem = {};\n    for (var key in responsive) {\n      var val = responsive[key];\n      // update responsive\n      // from: 300: 2\n      // to: \n      //   300: { \n      //     items: 2 \n      //   } \n      val = typeof val === 'number' ? {items: val} : val;\n      responsiveTem[key] = val;\n    }\n    responsive = responsiveTem;\n    responsiveTem = null;\n  }\n\n  // update options\n  function updateOptions (obj) {\n    for (var key in obj) {\n      if (!carousel) {\n        if (key === 'slideBy') { obj[key] = 'page'; }\n        if (key === 'edgePadding') { obj[key] = false; }\n        if (key === 'autoHeight') { obj[key] = false; }\n      }\n\n      // update responsive options\n      if (key === 'responsive') { updateOptions(obj[key]); }\n    }\n  }\n  if (!carousel) { updateOptions(options); }\n\n\n  // === define and set variables ===\n  if (!carousel) {\n    options.axis = 'horizontal';\n    options.slideBy = 'page';\n    options.edgePadding = false;\n\n    var animateIn = options.animateIn,\n        animateOut = options.animateOut,\n        animateDelay = options.animateDelay,\n        animateNormal = options.animateNormal;\n  }\n\n  var horizontal = options.axis === 'horizontal' ? true : false,\n      outerWrapper = doc.createElement('div'),\n      innerWrapper = doc.createElement('div'),\n      middleWrapper,\n      container = options.container,\n      containerParent = container.parentNode,\n      containerHTML = container.outerHTML,\n      slideItems = container.children,\n      slideCount = slideItems.length,\n      breakpointZone,\n      windowWidth = getWindowWidth(),\n      isOn = false;\n  if (responsive) { setBreakpointZone(); }\n  if (carousel) { container.className += ' tns-vpfix'; }\n\n  // fixedWidth: viewport > rightBoundary > indexMax\n  var autoWidth = options.autoWidth,\n      fixedWidth = getOption('fixedWidth'),\n      edgePadding = getOption('edgePadding'),\n      gutter = getOption('gutter'),\n      viewport = getViewportWidth(),\n      center = getOption('center'),\n      items = !autoWidth ? Math.floor(getOption('items')) : 1,\n      slideBy = getOption('slideBy'),\n      viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n      arrowKeys = getOption('arrowKeys'),\n      speed = getOption('speed'),\n      rewind = options.rewind,\n      loop = rewind ? false : options.loop,\n      autoHeight = getOption('autoHeight'),\n      controls = getOption('controls'),\n      controlsText = getOption('controlsText'),\n      nav = getOption('nav'),\n      touch = getOption('touch'),\n      mouseDrag = getOption('mouseDrag'),\n      autoplay = getOption('autoplay'),\n      autoplayTimeout = getOption('autoplayTimeout'),\n      autoplayText = getOption('autoplayText'),\n      autoplayHoverPause = getOption('autoplayHoverPause'),\n      autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n      sheet = createStyleSheet(),\n      lazyload = options.lazyload,\n      lazyloadSelector = options.lazyloadSelector,\n      slidePositions, // collection of slide positions\n      slideItemsOut = [],\n      cloneCount = loop ? getCloneCountForLoop() : 0,\n      slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n      hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n      rightBoundary = fixedWidth ? getRightBoundary() : null,\n      updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n      // transform\n      transformAttr = horizontal ? 'left' : 'top',\n      transformPrefix = '',\n      transformPostfix = '',\n      // index\n      getIndexMax = (function () {\n        if (fixedWidth) {\n          return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n        } else if (autoWidth) {\n          return function() {\n            for (var i = slideCountNew; i--;) {\n              if (slidePositions[i] >= - rightBoundary) { return i; }\n            }\n          };\n        } else {\n          return function() {\n            if (center && carousel && !loop) {\n              return slideCount - 1;\n            } else {\n              return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n            }\n          };\n        }\n      })(),\n      index = getStartIndex(getOption('startIndex')),\n      indexCached = index,\n      displayIndex = getCurrentSlide(),\n      indexMin = 0,\n      indexMax = !autoWidth ? getIndexMax() : null,\n      // resize\n      resizeTimer,\n      preventActionWhenRunning = options.preventActionWhenRunning,\n      swipeAngle = options.swipeAngle,\n      moveDirectionExpected = swipeAngle ? '?' : true,\n      running = false,\n      onInit = options.onInit,\n      events = new Events(),\n      // id, class\n      newContainerClasses = ' tns-slider tns-' + options.mode,\n      slideId = container.id || getSlideId(),\n      disable = getOption('disable'),\n      disabled = false,\n      freezable = options.freezable,\n      freeze = freezable && !autoWidth ? getFreeze() : false,\n      frozen = false,\n      controlsEvents = {\n        'click': onControlsClick,\n        'keydown': onControlsKeydown\n      },\n      navEvents = {\n        'click': onNavClick,\n        'keydown': onNavKeydown\n      },\n      hoverEvents = {\n        'mouseover': mouseoverPause,\n        'mouseout': mouseoutRestart\n      },\n      visibilityEvent = {'visibilitychange': onVisibilityChange},\n      docmentKeydownEvent = {'keydown': onDocumentKeydown},\n      touchEvents = {\n        'touchstart': onPanStart,\n        'touchmove': onPanMove,\n        'touchend': onPanEnd,\n        'touchcancel': onPanEnd\n      }, dragEvents = {\n        'mousedown': onPanStart,\n        'mousemove': onPanMove,\n        'mouseup': onPanEnd,\n        'mouseleave': onPanEnd\n      },\n      hasControls = hasOption('controls'),\n      hasNav = hasOption('nav'),\n      navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n      hasAutoplay = hasOption('autoplay'),\n      hasTouch = hasOption('touch'),\n      hasMouseDrag = hasOption('mouseDrag'),\n      slideActiveClass = 'tns-slide-active',\n      imgCompleteClass = 'tns-complete',\n      imgEvents = {\n        'load': onImgLoaded,\n        'error': onImgFailed\n      },\n      imgsComplete,\n      liveregionCurrent,\n      preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n  // controls\n  if (hasControls) {\n    var controlsContainer = options.controlsContainer,\n        controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n        prevButton = options.prevButton,\n        nextButton = options.nextButton,\n        prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n        nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n        prevIsButton,\n        nextIsButton;\n  }\n\n  // nav\n  if (hasNav) {\n    var navContainer = options.navContainer,\n        navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n        navItems,\n        pages = autoWidth ? slideCount : getPages(),\n        pagesCached = 0,\n        navClicked = -1,\n        navCurrentIndex = getCurrentNavIndex(),\n        navCurrentIndexCached = navCurrentIndex,\n        navActiveClass = 'tns-nav-active',\n        navStr = 'Carousel Page ',\n        navStrCurrent = ' (Current Slide)';\n  }\n\n  // autoplay\n  if (hasAutoplay) {\n    var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n        autoplayButton = options.autoplayButton,\n        autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n        autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', ' animation</span>'],\n        autoplayTimer,\n        animating,\n        autoplayHoverPaused,\n        autoplayUserPaused,\n        autoplayVisibilityPaused;\n  }\n\n  if (hasTouch || hasMouseDrag) {\n    var initPosition = {},\n        lastPosition = {},\n        translateInit,\n        disX,\n        disY,\n        panStart = false,\n        rafIndex,\n        getDist = horizontal ? \n          function(a, b) { return a.x - b.x; } :\n          function(a, b) { return a.y - b.y; };\n  }\n  \n  // disable slider when slidecount <= items\n  if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n  if (TRANSFORM) {\n    transformAttr = TRANSFORM;\n    transformPrefix = 'translate';\n\n    if (HAS3DTRANSFORMS) {\n      transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n      transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n    } else {\n      transformPrefix += horizontal ? 'X(' : 'Y(';\n      transformPostfix = ')';\n    }\n\n  }\n\n  if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n  initStructure();\n  initSheet();\n  initSliderTransform();\n\n  // === COMMON FUNCTIONS === //\n  function resetVariblesWhenDisable (condition) {\n    if (condition) {\n      controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n    }\n  }\n\n  function getCurrentSlide () {\n    var tem = carousel ? index - cloneCount : index;\n    while (tem < 0) { tem += slideCount; }\n    return tem%slideCount + 1;\n  }\n\n  function getStartIndex (ind) {\n    ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n    return carousel ? ind + cloneCount : ind;\n  }\n\n  function getAbsIndex (i) {\n    if (i == null) { i = index; }\n\n    if (carousel) { i -= cloneCount; }\n    while (i < 0) { i += slideCount; }\n\n    return Math.floor(i%slideCount);\n  }\n\n  function getCurrentNavIndex () {\n    var absIndex = getAbsIndex(),\n        result;\n\n    result = navAsThumbnails ? absIndex : \n      fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : \n          Math.floor(absIndex / items);\n\n    // set active nav to the last one when reaches the right edge\n    if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n    return result;\n  }\n\n  function getItemsMax () {\n    // fixedWidth or autoWidth while viewportMax is not available\n    if (autoWidth || (fixedWidth && !viewportMax)) {\n      return slideCount - 1;\n    // most cases\n    } else {\n      var str = fixedWidth ? 'fixedWidth' : 'items',\n          arr = [];\n\n      if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n      if (responsive) {\n        for (var bp in responsive) {\n          var tem = responsive[bp][str];\n          if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n        }\n      }\n\n      if (!arr.length) { arr.push(0); }\n\n      return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n    }\n  }\n\n  function getCloneCountForLoop () {\n    var itemsMax = getItemsMax(),\n        result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n    result = Math.max(itemsMax, result);\n\n    return hasOption('edgePadding') ? result + 1 : result;\n  }\n\n  function getWindowWidth () {\n    return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n  }\n\n  function getInsertPosition (pos) {\n    return pos === 'top' ? 'afterbegin' : 'beforeend';\n  }\n\n  function getClientWidth (el) {\n    var div = doc.createElement('div'), rect, width;\n    el.appendChild(div);\n    rect = div.getBoundingClientRect();\n    width = rect.right - rect.left;\n    div.remove();\n    return width || getClientWidth(el.parentNode);\n  }\n\n  function getViewportWidth () {\n    var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n    return getClientWidth(containerParent) - gap;\n  }\n\n  function hasOption (item) {\n    if (options[item]) {\n      return true;\n    } else {\n      if (responsive) {\n        for (var bp in responsive) {\n          if (responsive[bp][item]) { return true; }\n        }\n      }\n      return false;\n    }\n  }\n\n  // get option:\n  // fixed width: viewport, fixedWidth, gutter => items\n  // others: window width => all variables\n  // all: items => slideBy\n  function getOption (item, ww) {\n    if (ww == null) { ww = windowWidth; }\n\n    if (item === 'items' && fixedWidth) {\n      return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n    } else {\n      var result = options[item];\n\n      if (responsive) {\n        for (var bp in responsive) {\n          // bp: convert string to number\n          if (ww >= parseInt(bp)) {\n            if (item in responsive[bp]) { result = responsive[bp][item]; }\n          }\n        }\n      }\n\n      if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n      if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n      return result;\n    }\n  }\n\n  function getSlideMarginLeft (i) {\n    return CALC ? \n      CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : \n      i * 100 / slideCountNew + '%';\n  }\n\n  function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n    var str = '';\n\n    if (edgePaddingTem !== undefined) {\n      var gap = edgePaddingTem;\n      if (gutterTem) { gap -= gutterTem; }\n      str = horizontal ?\n        'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n        'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n    } else if (gutterTem && !fixedWidthTem) {\n      var gutterTemUnit = '-' + gutterTem + 'px',\n          dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n      str = 'margin: 0 ' + dir + ';'\n    }\n\n    if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n    return str;\n  }\n\n  function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n    if (fixedWidthTem) {\n      return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n    } else {\n      return CALC ?\n        CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n        slideCountNew * 100 / itemsTem + '%';\n    }\n  }\n\n  function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n    var width;\n\n    if (fixedWidthTem) {\n      width = (fixedWidthTem + gutterTem) + 'px';\n    } else {\n      if (!carousel) { itemsTem = Math.floor(itemsTem); }\n      var dividend = carousel ? slideCountNew : itemsTem;\n      width = CALC ? \n        CALC + '(100% / ' + dividend + ')' : \n        100 / dividend + '%';\n    }\n\n    width = 'width:' + width;\n\n    // inner slider: overwrite outer slider styles\n    return nested !== 'inner' ? width + ';' : width + ' !important;';\n  }\n\n  function getSlideGutterStyle (gutterTem) {\n    var str = '';\n\n    // gutter maybe interger || 0\n    // so can't use 'if (gutter)'\n    if (gutterTem !== false) {\n      var prop = horizontal ? 'padding-' : 'margin-',\n          dir = horizontal ? 'right' : 'bottom';\n      str = prop +  dir + ': ' + gutterTem + 'px;';\n    }\n\n    return str;\n  }\n\n  function getCSSPrefix (name, num) {\n    var prefix = name.substring(0, name.length - num).toLowerCase();\n    if (prefix) { prefix = '-' + prefix + '-'; }\n\n    return prefix;\n  }\n\n  function getTransitionDurationStyle (speed) {\n    return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n  }\n\n  function getAnimationDurationStyle (speed) {\n    return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n  }\n\n  function initStructure () {\n    var classOuter = 'tns-outer',\n        classInner = 'tns-inner',\n        hasGutter = hasOption('gutter');\n\n    outerWrapper.className = classOuter;\n    innerWrapper.className = classInner;\n    outerWrapper.id = slideId + '-ow';\n    innerWrapper.id = slideId + '-iw';\n\n    // set container properties\n    if (container.id === '') { container.id = slideId; }\n    newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n    newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n    if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n    newContainerClasses += ' tns-' + options.axis;\n    container.className += newContainerClasses;\n\n    // add constrain layer for carousel\n    if (carousel) {\n      middleWrapper = doc.createElement('div');\n      middleWrapper.id = slideId + '-mw';\n      middleWrapper.className = 'tns-ovh';\n\n      outerWrapper.appendChild(middleWrapper);\n      middleWrapper.appendChild(innerWrapper);\n    } else {\n      outerWrapper.appendChild(innerWrapper);\n    }\n\n    if (autoHeight) {\n      var wp = middleWrapper ? middleWrapper : innerWrapper;\n      wp.className += ' tns-ah';\n    }\n\n    containerParent.insertBefore(outerWrapper, container);\n    innerWrapper.appendChild(container);\n\n    // add id, class, aria attributes \n    // before clone slides\n    forEach(slideItems, function(item, i) {\n      addClass(item, 'tns-item');\n      if (!item.id) { item.id = slideId + '-item' + i; }\n      if (!carousel && animateNormal) { addClass(item, animateNormal); }\n      setAttrs(item, {\n        'aria-hidden': 'true',\n        'tabindex': '-1'\n      });\n    });\n\n    // ## clone slides\n    // carousel: n + slides + n\n    // gallery:      slides + n\n    if (cloneCount) {\n      var fragmentBefore = doc.createDocumentFragment(), \n          fragmentAfter = doc.createDocumentFragment();\n\n      for (var j = cloneCount; j--;) {\n        var num = j%slideCount,\n            cloneFirst = slideItems[num].cloneNode(true);\n        removeAttrs(cloneFirst, 'id');\n        fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n        if (carousel) {\n          var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n          removeAttrs(cloneLast, 'id');\n          fragmentBefore.appendChild(cloneLast);\n        }\n      }\n\n      container.insertBefore(fragmentBefore, container.firstChild);\n      container.appendChild(fragmentAfter);\n      slideItems = container.children;\n    }\n\n  }\n\n  function initSliderTransform () {\n    // ## images loaded/failed\n    if (hasOption('autoHeight') || autoWidth || !horizontal) {\n      var imgs = container.querySelectorAll('img');\n\n      // add complete class if all images are loaded/failed\n      forEach(imgs, function(img) {\n        var src = img.src;\n        \n        if (src && src.indexOf('data:image') < 0) {\n          addEvents(img, imgEvents);\n          img.src = '';\n          img.src = src;\n          addClass(img, 'loading');\n        } else if (!lazyload) {\n          imgLoaded(img);\n        }\n      });\n\n      // All imgs are completed\n      raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n      // Check imgs in window only for auto height\n      if (!autoWidth && horizontal) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n      lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n    } else {\n      // set container transform property\n      if (carousel) { doContainerTransformSilent(); }\n\n      // update slider tools and events\n      initTools();\n      initEvents();\n    }\n  }\n\n  function initSliderTransformStyleCheck () {\n    if (autoWidth) {\n      // check styles application\n      var num = loop ? index : slideCount - 1;\n      (function stylesApplicationCheck() {\n        slideItems[num - 1].getBoundingClientRect().right.toFixed(2) === slideItems[num].getBoundingClientRect().left.toFixed(2) ?\n        initSliderTransformCore() :\n        setTimeout(function(){ stylesApplicationCheck() }, 16);\n      })();\n    } else {\n      initSliderTransformCore();\n    }\n  }\n\n\n  function initSliderTransformCore () {\n    // run Fn()s which are rely on image loading\n    if (!horizontal || autoWidth) {\n      setSlidePositions();\n\n      if (autoWidth) {\n        rightBoundary = getRightBoundary();\n        if (freezable) { freeze = getFreeze(); }\n        indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n        resetVariblesWhenDisable(disable || freeze);\n      } else {\n        updateContentWrapperHeight();\n      }\n    }\n\n    // set container transform property\n    if (carousel) { doContainerTransformSilent(); }\n\n    // update slider tools and events\n    initTools();\n    initEvents();\n  }\n\n  function initSheet () {\n    // gallery:\n    // set animation classes and left value for gallery slider\n    if (!carousel) { \n      for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n        var item = slideItems[i];\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, animateIn);\n        removeClass(item, animateNormal);\n      }\n    }\n\n    // #### LAYOUT\n\n    // ## INLINE-BLOCK VS FLOAT\n\n    // ## PercentageLayout:\n    // slides: inline-block\n    // remove blank space between slides by set font-size: 0\n\n    // ## Non PercentageLayout:\n    // slides: float\n    //         margin-right: -100%\n    //         margin-left: ~\n\n    // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n    if (horizontal) {\n      if (PERCENTAGELAYOUT || autoWidth) {\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n        addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n      } else if (carousel) {\n        forEach(slideItems, function (slide, i) {\n          slide.style.marginLeft = getSlideMarginLeft(i);\n        });\n      }\n    }\n\n\n    // ## BASIC STYLES\n    if (CSSMQ) {\n      // middle wrapper style\n      if (TRANSITIONDURATION) {\n        var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n        addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n      }\n\n      // inner wrapper styles\n      str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n      addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n      // container styles\n      if (carousel) {\n        str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n        if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n        addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n      }\n\n      // slide styles\n      str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n      if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n      // set gallery items transition-duration\n      if (!carousel) {\n        if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n        if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n      }\n      if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n    // non CSS mediaqueries: IE8\n    // ## update inner wrapper, container, slides if needed\n    // set inline styles for inner wrapper & container\n    // insert stylesheet (one line) for slides only (since slides are many)\n    } else {\n      // middle wrapper styles\n      update_carousel_transition_duration();\n\n      // inner wrapper styles\n      innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n      // container styles\n      if (carousel && horizontal && !autoWidth) {\n        container.style.width = getContainerWidth(fixedWidth, gutter, items);\n      }\n\n      // slide styles\n      var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n      if (gutter) { str += getSlideGutterStyle(gutter); }\n\n      // append to the last line\n      if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n    }\n\n    // ## MEDIAQUERIES\n    if (responsive && CSSMQ) {\n      for (var bp in responsive) {\n        // bp: convert string to number\n        bp = parseInt(bp);\n\n        var opts = responsive[bp],\n            str = '',\n            middleWrapperStr = '',\n            innerWrapperStr = '',\n            containerStr = '',\n            slideStr = '',\n            itemsBP = !autoWidth ? getOption('items', bp) : null,\n            fixedWidthBP = getOption('fixedWidth', bp),\n            speedBP = getOption('speed', bp),\n            edgePaddingBP = getOption('edgePadding', bp),\n            autoHeightBP = getOption('autoHeight', bp),\n            gutterBP = getOption('gutter', bp);\n\n        // middle wrapper string\n        if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n          middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n        }\n\n        // inner wrapper string\n        if ('edgePadding' in opts || 'gutter' in opts) {\n          innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n        }\n\n        // container string\n        if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n          containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n        }\n        if (TRANSITIONDURATION && 'speed' in opts) {\n          containerStr += getTransitionDurationStyle(speedBP);\n        }\n        if (containerStr) {\n          containerStr = '#' + slideId + '{' + containerStr + '}';\n        }\n\n        // slide string\n        if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n          slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n        }\n        if ('gutter' in opts) {\n          slideStr += getSlideGutterStyle(gutterBP);\n        }\n        // set gallery items transition-duration\n        if (!carousel && 'speed' in opts) {\n          if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n          if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n        }\n        if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n        // add up\n        str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n        if (str) {\n          sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n        }\n      }\n    }\n  }\n\n  function initTools () {\n    // == slides ==\n    updateSlideStatus();\n\n    // == live region ==\n    outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">slide <span class=\"current\">' + getLiveRegionStr() + '</span>  of ' + slideCount + '</div>');\n    liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n    // == autoplayInit ==\n    if (hasAutoplay) {\n      var txt = autoplay ? 'stop' : 'start';\n      if (autoplayButton) {\n        setAttrs(autoplayButton, {'data-action': txt});\n      } else if (options.autoplayButtonOutput) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + txt + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\n        autoplayButton = outerWrapper.querySelector('[data-action]');\n      }\n\n      // add event\n      if (autoplayButton) {\n        addEvents(autoplayButton, {'click': toggleAutoplay});\n      }\n\n      if (autoplay) {\n        startAutoplay();\n        if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n        if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n      }\n    }\n \n    // == navInit ==\n    if (hasNav) {\n      var initIndex = !carousel ? 0 : cloneCount;\n      // customized nav\n      // will not hide the navs in case they're thumbnails\n      if (navContainer) {\n        setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n        navItems = navContainer.children;\n        forEach(navItems, function(item, i) {\n          setAttrs(item, {\n            'data-nav': i,\n            'tabindex': '-1',\n            'aria-label': navStr + (i + 1),\n            'aria-controls': slideId,\n          });\n        });\n\n      // generated nav \n      } else {\n        var navHtml = '',\n            hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n        for (var i = 0; i < slideCount; i++) {\n          // hide nav items by default\n          navHtml += '<button data-nav=\"' + i +'\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) +'\"></button>';\n        }\n        navHtml = '<div class=\"tns-nav\" aria-label=\"Carousel Pagination\">' + navHtml + '</div>';\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n        navContainer = outerWrapper.querySelector('.tns-nav');\n        navItems = navContainer.children;\n      }\n\n      updateNavVisibility();\n\n      // add transition\n      if (TRANSITIONDURATION) {\n        var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n            str = 'transition: all ' + speed / 1000 + 's';\n\n        if (prefix) {\n          str = '-' + prefix + '-' + str;\n        }\n\n        addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n      }\n\n      setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n      removeAttrs(navItems[navCurrentIndex], 'tabindex');\n      addClass(navItems[navCurrentIndex], navActiveClass);\n\n      // add events\n      addEvents(navContainer, navEvents);\n    }\n\n\n\n    // == controlsInit ==\n    if (hasControls) {\n      if (!controlsContainer && (!prevButton || !nextButton)) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"Carousel Navigation\" tabindex=\"0\"><button data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[0] + '</button><button data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[1] + '</button></div>');\n\n        controlsContainer = outerWrapper.querySelector('.tns-controls');\n      }\n\n      if (!prevButton || !nextButton) {\n        prevButton = controlsContainer.children[0];\n        nextButton = controlsContainer.children[1];\n      }\n\n      if (options.controlsContainer) {\n        setAttrs(controlsContainer, {\n          'aria-label': 'Carousel Navigation',\n          'tabindex': '0'\n        });\n      }\n\n      if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n        setAttrs([prevButton, nextButton], {\n          'aria-controls': slideId,\n          'tabindex': '-1',\n        });\n      }\n      \n      if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n        setAttrs(prevButton, {'data-controls' : 'prev'});\n        setAttrs(nextButton, {'data-controls' : 'next'});\n      }\n\n      prevIsButton = isButton(prevButton);\n      nextIsButton = isButton(nextButton);\n\n      updateControlsStatus();\n\n      // add events\n      if (controlsContainer) {\n        addEvents(controlsContainer, controlsEvents);\n      } else {\n        addEvents(prevButton, controlsEvents);\n        addEvents(nextButton, controlsEvents);\n      }\n    }\n\n    // hide tools if needed\n    disableUI();\n  }\n\n  function initEvents () {\n    // add events\n    if (carousel && TRANSITIONEND) {\n      var eve = {};\n      eve[TRANSITIONEND] = onTransitionEnd;\n      addEvents(container, eve);\n    }\n\n    if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n    if (mouseDrag) { addEvents(container, dragEvents); }\n    if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n    if (nested === 'inner') {\n      events.on('outerResized', function () {\n        resizeTasks();\n        events.emit('innerLoaded', info());\n      });\n    } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n      addEvents(win, {'resize': onResize});\n    }\n\n    if (autoHeight) {\n      if (nested === 'outer') {\n        events.on('innerLoaded', doAutoHeight);\n      } else if (!disable) { doAutoHeight(); }\n    }\n\n    doLazyLoad();\n    if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n    events.on('indexChanged', additionalUpdates);\n    if (nested === 'inner') { events.emit('innerLoaded', info()); }\n    if (typeof onInit === 'function') { onInit(info()); }\n    isOn = true;\n  }\n\n  function destroy () {\n    // sheet\n    sheet.disabled = true;\n    if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n    // remove win event listeners\n    removeEvents(win, {'resize': onResize});\n\n    // arrowKeys, controls, nav\n    if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n    if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n    if (navContainer) { removeEvents(navContainer, navEvents); }\n\n    // autoplay\n    removeEvents(container, hoverEvents);\n    removeEvents(container, visibilityEvent);\n    if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n    if (autoplay) { clearInterval(autoplayTimer); }\n\n    // container\n    if (carousel && TRANSITIONEND) {\n      var eve = {};\n      eve[TRANSITIONEND] = onTransitionEnd;\n      removeEvents(container, eve);\n    }\n    if (touch) { removeEvents(container, touchEvents); }\n    if (mouseDrag) { removeEvents(container, dragEvents); }\n\n    // cache Object values in options && reset HTML\n    var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n    tnsList.forEach(function(item, i) {\n      var el = item === 'container' ? outerWrapper : options[item];\n\n      if (typeof el === 'object') {\n        var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n            parentEl = el.parentNode;\n        el.outerHTML = htmlList[i];\n        options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n      }\n    });\n\n\n    // reset variables\n    tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n    // check variables\n    // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n    for (var a in this) {\n      if (a !== 'rebuild') { this[a] = null; }\n    }\n    isOn = false;\n  }\n\n// === ON RESIZE ===\n  // responsive || fixedWidth || autoWidth || !horizontal\n  function onResize (e) {\n    raf(function(){ resizeTasks(getEvent(e)); });\n  }\n\n  function resizeTasks (e) {\n    if (!isOn) { return; }\n    if (nested === 'outer') { events.emit('outerResized', info(e)); }\n    windowWidth = getWindowWidth();\n    var bpChanged,\n        breakpointZoneTem = breakpointZone,\n        needContainerTransform = false;\n\n    if (responsive) {\n      setBreakpointZone();\n      bpChanged = breakpointZoneTem !== breakpointZone;\n      // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n      if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n    }\n\n    var indChanged,\n        itemsChanged,\n        itemsTem = items,\n        disableTem = disable,\n        freezeTem = freeze,\n        arrowKeysTem = arrowKeys,\n        controlsTem = controls,\n        navTem = nav,\n        touchTem = touch,\n        mouseDragTem = mouseDrag,\n        autoplayTem = autoplay,\n        autoplayHoverPauseTem = autoplayHoverPause,\n        autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n        indexTem = index;\n\n    if (bpChanged) {\n      var fixedWidthTem = fixedWidth,\n          autoHeightTem = autoHeight,\n          controlsTextTem = controlsText,\n          centerTem = center,\n          autoplayTextTem = autoplayText;\n\n      if (!CSSMQ) {\n        var gutterTem = gutter,\n            edgePaddingTem = edgePadding;\n      }\n    }\n\n    // get option:\n    // fixed width: viewport, fixedWidth, gutter => items\n    // others: window width => all variables\n    // all: items => slideBy\n    arrowKeys = getOption('arrowKeys');\n    controls = getOption('controls');\n    nav = getOption('nav');\n    touch = getOption('touch');\n    center = getOption('center');\n    mouseDrag = getOption('mouseDrag');\n    autoplay = getOption('autoplay');\n    autoplayHoverPause = getOption('autoplayHoverPause');\n    autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n    if (bpChanged) {\n      disable = getOption('disable');\n      fixedWidth = getOption('fixedWidth');\n      speed = getOption('speed');\n      autoHeight = getOption('autoHeight');\n      controlsText = getOption('controlsText');\n      autoplayText = getOption('autoplayText');\n      autoplayTimeout = getOption('autoplayTimeout');\n\n      if (!CSSMQ) {\n        edgePadding = getOption('edgePadding');\n        gutter = getOption('gutter');\n      }\n    }\n    // update options\n    resetVariblesWhenDisable(disable);\n\n    viewport = getViewportWidth(); // <= edgePadding, gutter\n    if ((!horizontal || autoWidth) && !disable) {\n      setSlidePositions();\n      if (!horizontal) {\n        updateContentWrapperHeight(); // <= setSlidePositions\n        needContainerTransform = true;\n      }\n    }\n    if (fixedWidth || autoWidth) {\n      rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n                                          // fixedWidth: <= viewport, fixedWidth, gutter\n      indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n                                // fixedWidth: <= rightBoundary, fixedWidth, gutter\n    }\n\n    if (bpChanged || fixedWidth) {\n      items = getOption('items');\n      slideBy = getOption('slideBy');\n      itemsChanged = items !== itemsTem;\n\n      if (itemsChanged) {\n        if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n        // check index before transform in case\n        // slider reach the right edge then items become bigger\n        updateIndex();\n      }\n    }\n    \n    if (bpChanged) {\n      if (disable !== disableTem) {\n        if (disable) {\n          disableSlider();\n        } else {\n          enableSlider(); // <= slidePositions, rightBoundary, indexMax\n        }\n      }\n    }\n\n    if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n      freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n                            // <= fixedWidth: fixedWidth, gutter, rightBoundary\n                            // <= others: items\n\n      if (freeze !== freezeTem) {\n        if (freeze) {\n          doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n          freezeSlider();\n        } else {\n          unfreezeSlider();\n          needContainerTransform = true;\n        }\n      }\n    }\n\n    resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n    if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n    if (arrowKeys !== arrowKeysTem) {\n      arrowKeys ?\n        addEvents(doc, docmentKeydownEvent) :\n        removeEvents(doc, docmentKeydownEvent);\n    }\n    if (controls !== controlsTem) {\n      if (controls) {\n        if (controlsContainer) {\n          showElement(controlsContainer);\n        } else {\n          if (prevButton) { showElement(prevButton); }\n          if (nextButton) { showElement(nextButton); }\n        }\n      } else {\n        if (controlsContainer) {\n          hideElement(controlsContainer);\n        } else {\n          if (prevButton) { hideElement(prevButton); }\n          if (nextButton) { hideElement(nextButton); }\n        }\n      }\n    }\n    if (nav !== navTem) {\n      nav ?\n        showElement(navContainer) :\n        hideElement(navContainer);\n    }\n    if (touch !== touchTem) {\n      touch ?\n        addEvents(container, touchEvents, options.preventScrollOnTouch) :\n        removeEvents(container, touchEvents);\n    }\n    if (mouseDrag !== mouseDragTem) {\n      mouseDrag ?\n        addEvents(container, dragEvents) :\n        removeEvents(container, dragEvents);\n    }\n    if (autoplay !== autoplayTem) {\n      if (autoplay) {\n        if (autoplayButton) { showElement(autoplayButton); }\n        if (!animating && !autoplayUserPaused) { startAutoplay(); }\n      } else {\n        if (autoplayButton) { hideElement(autoplayButton); }\n        if (animating) { stopAutoplay(); }\n      }\n    }\n    if (autoplayHoverPause !== autoplayHoverPauseTem) {\n      autoplayHoverPause ?\n        addEvents(container, hoverEvents) :\n        removeEvents(container, hoverEvents);\n    }\n    if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n      autoplayResetOnVisibility ?\n        addEvents(doc, visibilityEvent) :\n        removeEvents(doc, visibilityEvent);\n    }\n\n    if (bpChanged) {\n      if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n      if (autoHeight !== autoHeightTem) {\n        if (!autoHeight) { innerWrapper.style.height = ''; }\n      }\n\n      if (controls && controlsText !== controlsTextTem) {\n        prevButton.innerHTML = controlsText[0];\n        nextButton.innerHTML = controlsText[1];\n      }\n\n      if (autoplayButton && autoplayText !== autoplayTextTem) {\n        var i = autoplay ? 1 : 0,\n            html = autoplayButton.innerHTML,\n            len = html.length - autoplayTextTem[i].length;\n        if (html.substring(len) === autoplayTextTem[i]) {\n          autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n        }\n      }\n    } else {\n      if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n    }\n\n    if (itemsChanged || fixedWidth && !autoWidth) {\n      pages = getPages();\n      updateNavVisibility();\n    }\n\n    indChanged = index !== indexTem;\n    if (indChanged) { \n      events.emit('indexChanged', info());\n      needContainerTransform = true;\n    } else if (itemsChanged) {\n      if (!indChanged) { additionalUpdates(); }\n    } else if (fixedWidth || autoWidth) {\n      doLazyLoad(); \n      updateSlideStatus();\n      updateLiveRegion();\n    }\n\n    if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n    if (!disable && !freeze) {\n      // non-meduaqueries: IE8\n      if (bpChanged && !CSSMQ) {\n        // middle wrapper styles\n        if (autoHeight !== autoheightTem || speed !== speedTem) {\n          update_carousel_transition_duration();\n        }\n\n        // inner wrapper styles\n        if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n          innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n        }\n\n        if (horizontal) {\n          // container styles\n          if (carousel) {\n            container.style.width = getContainerWidth(fixedWidth, gutter, items);\n          }\n\n          // slide styles\n          var str = getSlideWidthStyle(fixedWidth, gutter, items) + \n                    getSlideGutterStyle(gutter);\n\n          // remove the last line and\n          // add new styles\n          removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n          addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n        }\n      }\n\n      // auto height\n      if (autoHeight) { doAutoHeight(); }\n\n      if (needContainerTransform) {\n        doContainerTransformSilent();\n        indexCached = index;\n      }\n    }\n\n    if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n  }\n\n\n\n\n\n  // === INITIALIZATION FUNCTIONS === //\n  function getFreeze () {\n    if (!fixedWidth && !autoWidth) {\n      var a = center ? items - (items - 1) / 2 : items;\n      return  slideCount <= a;\n    }\n\n    var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n        vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n    if (center) {\n      vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n    }\n\n    return width <= vp;\n  }\n\n  function setBreakpointZone () {\n    breakpointZone = 0;\n    for (var bp in responsive) {\n      bp = parseInt(bp); // convert string to number\n      if (windowWidth >= bp) { breakpointZone = bp; }\n    }\n  }\n\n  // (slideBy, indexMin, indexMax) => index\n  var updateIndex = (function () {\n    return loop ? \n      carousel ?\n        // loop + carousel\n        function () {\n          var leftEdge = indexMin,\n              rightEdge = indexMax;\n\n          leftEdge += slideBy;\n          rightEdge -= slideBy;\n\n          // adjust edges when has edge paddings\n          // or fixed-width slider with extra space on the right side\n          if (edgePadding) {\n            leftEdge += 1;\n            rightEdge -= 1;\n          } else if (fixedWidth) {\n            if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n          }\n\n          if (cloneCount) {\n            if (index > rightEdge) {\n              index -= slideCount;\n            } else if (index < leftEdge) {\n              index += slideCount;\n            }\n          }\n        } :\n        // loop + gallery\n        function() {\n          if (index > indexMax) {\n            while (index >= indexMin + slideCount) { index -= slideCount; }\n          } else if (index < indexMin) {\n            while (index <= indexMax - slideCount) { index += slideCount; }\n          }\n        } :\n      // non-loop\n      function() {\n        index = Math.max(indexMin, Math.min(indexMax, index));\n      };\n  })();\n\n  function disableUI () {\n    if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n    if (!nav && navContainer) { hideElement(navContainer); }\n    if (!controls) {\n      if (controlsContainer) {\n        hideElement(controlsContainer);\n      } else {\n        if (prevButton) { hideElement(prevButton); }\n        if (nextButton) { hideElement(nextButton); }\n      }\n    }\n  }\n\n  function enableUI () {\n    if (autoplay && autoplayButton) { showElement(autoplayButton); }\n    if (nav && navContainer) { showElement(navContainer); }\n    if (controls) {\n      if (controlsContainer) {\n        showElement(controlsContainer);\n      } else {\n        if (prevButton) { showElement(prevButton); }\n        if (nextButton) { showElement(nextButton); }\n      }\n    }\n  }\n\n  function freezeSlider () {\n    if (frozen) { return; }\n\n    // remove edge padding from inner wrapper\n    if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n    // add class tns-transparent to cloned slides\n    if (cloneCount) {\n      var str = 'tns-transparent';\n      for (var i = cloneCount; i--;) {\n        if (carousel) { addClass(slideItems[i], str); }\n        addClass(slideItems[slideCountNew - i - 1], str);\n      }\n    }\n\n    // update tools\n    disableUI();\n\n    frozen = true;\n  }\n\n  function unfreezeSlider () {\n    if (!frozen) { return; }\n\n    // restore edge padding for inner wrapper\n    // for mordern browsers\n    if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n    // remove class tns-transparent to cloned slides\n    if (cloneCount) {\n      var str = 'tns-transparent';\n      for (var i = cloneCount; i--;) {\n        if (carousel) { removeClass(slideItems[i], str); }\n        removeClass(slideItems[slideCountNew - i - 1], str);\n      }\n    }\n\n    // update tools\n    enableUI();\n\n    frozen = false;\n  }\n\n  function disableSlider () {\n    if (disabled) { return; }\n\n    sheet.disabled = true;\n    container.className = container.className.replace(newContainerClasses.substring(1), '');\n    removeAttrs(container, ['style']);\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) { hideElement(slideItems[j]); }\n        hideElement(slideItems[slideCountNew - j - 1]);\n      }\n    }\n\n    // vertical slider\n    if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n    // gallery\n    if (!carousel) { \n      for (var i = index, l = index + slideCount; i < l; i++) {\n        var item = slideItems[i];\n        removeAttrs(item, ['style']);\n        removeClass(item, animateIn);\n        removeClass(item, animateNormal);\n      }\n    }\n\n    // update tools\n    disableUI();\n\n    disabled = true;\n  }\n\n  function enableSlider () {\n    if (!disabled) { return; }\n\n    sheet.disabled = false;\n    container.className += newContainerClasses;\n    doContainerTransformSilent();\n\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) { showElement(slideItems[j]); }\n        showElement(slideItems[slideCountNew - j - 1]);\n      }\n    }\n\n    // gallery\n    if (!carousel) { \n      for (var i = index, l = index + slideCount; i < l; i++) {\n        var item = slideItems[i],\n            classN = i < index + items ? animateIn : animateNormal;\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, classN);\n      }\n    }\n\n    // update tools\n    enableUI();\n\n    disabled = false;\n  }\n\n  function updateLiveRegion () {\n    var str = getLiveRegionStr();\n    if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n  }\n\n  function getLiveRegionStr () {\n    var arr = getVisibleSlideRange(),\n        start = arr[0] + 1,\n        end = arr[1] + 1;\n    return start === end ? start + '' : start + ' to ' + end; \n  }\n\n  function getVisibleSlideRange (val) {\n    if (val == null) { val = getContainerTransformValue(); }\n    var start = index, end, rangestart, rangeend;\n\n    // get range start, range end for autoWidth and fixedWidth\n    if (center || edgePadding) {\n      if (autoWidth || fixedWidth) {\n        rangestart = - (parseFloat(val) + edgePadding);\n        rangeend = rangestart + viewport + edgePadding * 2;\n      }\n    } else {\n      if (autoWidth) {\n        rangestart = slidePositions[index];\n        rangeend = rangestart + viewport;\n      }\n    }\n\n    // get start, end\n    // - check auto width\n    if (autoWidth) {\n      slidePositions.forEach(function(point, i) {\n        if (i < slideCountNew) {\n          if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n          if (rangeend - point >= 0.5) { end = i; }\n        }\n      });\n\n    // - check percentage width, fixed width\n    } else {\n\n      if (fixedWidth) {\n        var cell = fixedWidth + gutter;\n        if (center || edgePadding) {\n          start = Math.floor(rangestart/cell);\n          end = Math.ceil(rangeend/cell - 1);\n        } else {\n          end = start + Math.ceil(viewport/cell) - 1;\n        }\n\n      } else {\n        if (center || edgePadding) {\n          var a = items - 1;\n          if (center) {\n            start -= a / 2;\n            end = index + a / 2;\n          } else {\n            end = index + a;\n          }\n\n          if (edgePadding) {\n            var b = edgePadding * items / viewport;\n            start -= b;\n            end += b;\n          }\n\n          start = Math.floor(start);\n          end = Math.ceil(end);\n        } else {\n          end = start + items - 1;\n        }\n      }\n\n      start = Math.max(start, 0);\n      end = Math.min(end, slideCountNew - 1);\n    }\n\n    return [start, end];\n  }\n\n  function doLazyLoad () {\n    if (lazyload && !disable) {\n      getImageArray.apply(null, getVisibleSlideRange()).forEach(function (img) {\n        if (!hasClass(img, imgCompleteClass)) {\n          // stop propagation transitionend event to container\n          var eve = {};\n          eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n          addEvents(img, eve);\n\n          addEvents(img, imgEvents);\n\n          // update src\n          img.src = getAttr(img, 'data-src');\n\n          // update srcset\n          var srcset = getAttr(img, 'data-srcset');\n          if (srcset) { img.srcset = srcset; }\n\n          addClass(img, 'loading');\n        }\n      });\n    }\n  }\n\n  function onImgLoaded (e) {\n    imgLoaded(getTarget(e));\n  }\n\n  function onImgFailed (e) {\n    imgFailed(getTarget(e));\n  }\n\n  function imgLoaded (img) {\n    addClass(img, 'loaded');\n    imgCompleted(img);\n  }\n\n  function imgFailed (img) {\n    addClass(img, 'failed');\n    imgCompleted(img);\n  }\n\n  function imgCompleted (img) {\n    addClass(img, 'tns-complete');\n    removeClass(img, 'loading');\n    removeEvents(img, imgEvents);\n  }\n\n  function getImageArray (start, end) {\n    var imgs = [];\n    while (start <= end) {\n      forEach(slideItems[start].querySelectorAll('img'), function (img) { imgs.push(img); });\n      start++;\n    }\n\n    return imgs;\n  }\n\n  // check if all visible images are loaded\n  // and update container height if it's done\n  function doAutoHeight () {\n    var imgs = getImageArray.apply(null, getVisibleSlideRange());\n    raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n  }\n\n  function imgsLoadedCheck (imgs, cb) {\n    // directly execute callback function if all images are complete\n    if (imgsComplete) { return cb(); }\n\n    // check selected image classes otherwise\n    imgs.forEach(function (img, index) {\n      if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n    });\n\n    // execute callback function if selected images are all complete\n    if (!imgs.length) { return cb(); }\n\n    // otherwise execute this functiona again\n    raf(function(){ imgsLoadedCheck(imgs, cb); });\n  } \n\n  function additionalUpdates () {\n    doLazyLoad(); \n    updateSlideStatus();\n    updateLiveRegion();\n    updateControlsStatus();\n    updateNavStatus();\n  }\n\n\n  function update_carousel_transition_duration () {\n    if (carousel && autoHeight) {\n      middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n    }\n  }\n\n  function getMaxSlideHeight (slideStart, slideRange) {\n    var heights = [];\n    for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n      heights.push(slideItems[i].offsetHeight);\n    }\n\n    return Math.max.apply(null, heights);\n  }\n\n  // update inner wrapper height\n  // 1. get the max-height of the visible slides\n  // 2. set transitionDuration to speed\n  // 3. update inner wrapper height to max-height\n  // 4. set transitionDuration to 0s after transition done\n  function updateInnerWrapperHeight () {\n    var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n        wp = middleWrapper ? middleWrapper : innerWrapper;\n\n    if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n  }\n\n  // get the distance from the top edge of the first slide to each slide\n  // (init) => slidePositions\n  function setSlidePositions () {\n    slidePositions = [0];\n    var attr = horizontal ? 'left' : 'top',\n        attr2 = horizontal ? 'right' : 'bottom',\n        base = slideItems[0].getBoundingClientRect()[attr];\n\n    forEach(slideItems, function(item, i) {\n      // skip the first slide\n      if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n      // add the end edge\n      if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n    });\n  }\n\n  // update slide\n  function updateSlideStatus () {\n    var range = getVisibleSlideRange(),\n        start = range[0],\n        end = range[1];\n\n    forEach(slideItems, function(item, i) {\n      // show slides\n      if (i >= start && i <= end) {\n        if (hasAttr(item, 'aria-hidden')) {\n          removeAttrs(item, ['aria-hidden', 'tabindex']);\n          addClass(item, slideActiveClass);\n        }\n      // hide slides\n      } else {\n        if (!hasAttr(item, 'aria-hidden')) {\n          setAttrs(item, {\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n          });\n          removeClass(item, slideActiveClass);\n        }\n      }\n    });\n  }\n\n  // gallery: update slide position\n  function updateGallerySlidePositions () {\n    var l = index + Math.min(slideCount, items);\n    for (var i = slideCountNew; i--;) {\n      var item = slideItems[i];\n\n      if (i >= index && i < l) {\n        // add transitions to visible slides when adjusting their positions\n        addClass(item, 'tns-moving');\n\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, animateIn);\n        removeClass(item, animateNormal);\n      } else if (item.style.left) {\n        item.style.left = '';\n        addClass(item, animateNormal);\n        removeClass(item, animateIn);\n      }\n\n      // remove outlet animation\n      removeClass(item, animateOut);\n    }\n\n    // removing '.tns-moving'\n    setTimeout(function() {\n      forEach(slideItems, function(el) {\n        removeClass(el, 'tns-moving');\n      });\n    }, 300);\n  }\n\n  // set tabindex on Nav\n  function updateNavStatus () {\n    // get current nav\n    if (nav) {\n      navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n      navClicked = -1;\n\n      if (navCurrentIndex !== navCurrentIndexCached) {\n        var navPrev = navItems[navCurrentIndexCached],\n            navCurrent = navItems[navCurrentIndex];\n\n        setAttrs(navPrev, {\n          'tabindex': '-1',\n          'aria-label': navStr + (navCurrentIndexCached + 1)\n        });\n        removeClass(navPrev, navActiveClass);\n        \n        setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n        removeAttrs(navCurrent, 'tabindex');\n        addClass(navCurrent, navActiveClass);\n\n        navCurrentIndexCached = navCurrentIndex;\n      }\n    }\n  }\n\n  function getLowerCaseNodeName (el) {\n    return el.nodeName.toLowerCase();\n  }\n\n  function isButton (el) {\n    return getLowerCaseNodeName(el) === 'button';\n  }\n\n  function isAriaDisabled (el) {\n    return el.getAttribute('aria-disabled') === 'true';\n  }\n\n  function disEnableElement (isButton, el, val) {\n    if (isButton) {\n      el.disabled = val;\n    } else {\n      el.setAttribute('aria-disabled', val.toString());\n    }\n  }\n\n  // set 'disabled' to true on controls when reach the edges\n  function updateControlsStatus () {\n    if (!controls || rewind || loop) { return; }\n\n    var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n        nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n        disablePrev = (index <= indexMin) ? true : false,\n        disableNext = (!rewind && index >= indexMax) ? true : false;\n\n    if (disablePrev && !prevDisabled) {\n      disEnableElement(prevIsButton, prevButton, true);\n    }\n    if (!disablePrev && prevDisabled) {\n      disEnableElement(prevIsButton, prevButton, false);\n    }\n    if (disableNext && !nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, true);\n    }\n    if (!disableNext && nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, false);\n    }\n  }\n\n  // set duration\n  function resetDuration (el, str) {\n    if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n  }\n\n  function getSliderWidth () {\n    return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n  }\n\n  function getCenterGap (num) {\n    if (num == null) { num = index; }\n\n    var gap = edgePadding ? gutter : 0;\n    return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n      fixedWidth ? (viewport - fixedWidth) / 2 :\n        (items - 1) / 2;\n  }\n\n  function getRightBoundary () {\n    var gap = edgePadding ? gutter : 0,\n        result = (viewport + gap) - getSliderWidth();\n\n    if (center && !loop) {\n      result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n        getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n    }\n    if (result > 0) { result = 0; }\n\n    return result;\n  }\n\n  function getContainerTransformValue (num) {\n    if (num == null) { num = index; }\n\n    var val;\n    if (horizontal && !autoWidth) {\n      if (fixedWidth) {\n        val = - (fixedWidth + gutter) * num;\n        if (center) { val += getCenterGap(); }\n      } else {\n        var denominator = TRANSFORM ? slideCountNew : items;\n        if (center) { num -= getCenterGap(); }\n        val = - num * 100 / denominator;\n      }\n    } else {\n      val = - slidePositions[num];\n      if (center && autoWidth) {\n        val += getCenterGap();\n      }\n    }\n\n    if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n    val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n    return val;\n  }\n\n  function doContainerTransformSilent (val) {\n    resetDuration(container, '0s');\n    doContainerTransform(val);\n  }\n\n  function doContainerTransform (val) {\n    if (val == null) { val = getContainerTransformValue(); }\n    container.style[transformAttr] = transformPrefix + val + transformPostfix;\n  }\n\n  function animateSlide (number, classOut, classIn, isOut) {\n    var l = number + items;\n    if (!loop) { l = Math.min(l, slideCountNew); }\n\n    for (var i = number; i < l; i++) {\n        var item = slideItems[i];\n\n      // set item positions\n      if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n      if (animateDelay && TRANSITIONDELAY) {\n        item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n      }\n      removeClass(item, classOut);\n      addClass(item, classIn);\n      \n      if (isOut) { slideItemsOut.push(item); }\n    }\n  }\n\n  // make transfer after click/drag:\n  // 1. change 'transform' property for mordern browsers\n  // 2. change 'left' property for legacy browsers\n  var transformCore = (function () {\n    return carousel ?\n      function () {\n        resetDuration(container, '');\n        if (TRANSITIONDURATION || !speed) {\n          // for morden browsers with non-zero duration or \n          // zero duration for all browsers\n          doContainerTransform();\n          // run fallback function manually \n          // when duration is 0 / container is hidden\n          if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n        } else {\n          // for old browser with non-zero duration\n          jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n        }\n\n        if (!horizontal) { updateContentWrapperHeight(); }\n      } :\n      function () {\n        slideItemsOut = [];\n\n        var eve = {};\n        eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n        removeEvents(slideItems[indexCached], eve);\n        addEvents(slideItems[index], eve);\n\n        animateSlide(indexCached, animateIn, animateOut, true);\n        animateSlide(index, animateNormal, animateIn);\n\n        // run fallback function manually \n        // when transition or animation not supported / duration is 0\n        if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n      };\n  })();\n\n  function render (e, sliderMoved) {\n    if (updateIndexBeforeTransform) { updateIndex(); }\n\n    // render when slider was moved (touch or drag) even though index may not change\n    if (index !== indexCached || sliderMoved) {\n      // events\n      events.emit('indexChanged', info());\n      events.emit('transitionStart', info());\n      if (autoHeight) { doAutoHeight(); }\n\n      // pause autoplay when click or keydown from user\n      if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n      running = true;\n      transformCore();\n    }\n  }\n\n  /*\n   * Transfer prefixed properties to the same format\n   * CSS: -Webkit-Transform => webkittransform\n   * JS: WebkitTransform => webkittransform\n   * @param {string} str - property\n   *\n   */\n  function strTrans (str) {\n    return str.toLowerCase().replace(/-/g, '');\n  }\n\n  // AFTER TRANSFORM\n  // Things need to be done after a transfer:\n  // 1. check index\n  // 2. add classes to visible slide\n  // 3. disable controls buttons when reach the first/last slide in non-loop slider\n  // 4. update nav status\n  // 5. lazyload images\n  // 6. update container height\n  function onTransitionEnd (event) {\n    // check running on gallery mode\n    // make sure trantionend/animationend events run only once\n    if (carousel || running) {\n      events.emit('transitionEnd', info(event));\n\n      if (!carousel && slideItemsOut.length > 0) {\n        for (var i = 0; i < slideItemsOut.length; i++) {\n          var item = slideItemsOut[i];\n          // set item positions\n          item.style.left = '';\n\n          if (ANIMATIONDELAY && TRANSITIONDELAY) { \n            item.style[ANIMATIONDELAY] = '';\n            item.style[TRANSITIONDELAY] = '';\n          }\n          removeClass(item, animateOut);\n          addClass(item, animateNormal);\n        }\n      }\n\n      /* update slides, nav, controls after checking ...\n       * => legacy browsers who don't support 'event' \n       *    have to check event first, otherwise event.target will cause an error \n       * => or 'gallery' mode: \n       *   + event target is slide item\n       * => or 'carousel' mode: \n       *   + event target is container, \n       *   + event.property is the same with transform attribute\n       */\n      if (!event || \n          !carousel && event.target.parentNode === container || \n          event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n        if (!updateIndexBeforeTransform) { \n          var indexTem = index;\n          updateIndex();\n          if (index !== indexTem) { \n            events.emit('indexChanged', info());\n\n            doContainerTransformSilent();\n          }\n        } \n\n        if (nested === 'inner') { events.emit('innerLoaded', info()); }\n        running = false;\n        indexCached = index;\n      }\n    }\n\n  }\n\n  // # ACTIONS\n  function goTo (targetIndex, e) {\n    if (freeze) { return; }\n\n    // prev slideBy\n    if (targetIndex === 'prev') {\n      onControlsClick(e, -1);\n\n    // next slideBy\n    } else if (targetIndex === 'next') {\n      onControlsClick(e, 1);\n\n    // go to exact slide\n    } else {\n      if (running) {\n        if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n      }\n\n      var absIndex = getAbsIndex(), \n          indexGap = 0;\n\n      if (targetIndex === 'first') {\n        indexGap = - absIndex;\n      } else if (targetIndex === 'last') {\n        indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n      } else {\n        if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n        if (!isNaN(targetIndex)) {\n          // from directly called goTo function\n          if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n          indexGap = targetIndex - absIndex;\n        }\n      }\n\n      // gallery: make sure new page won't overlap with current page\n      if (!carousel && indexGap && Math.abs(indexGap) < items) {\n        var factor = indexGap > 0 ? 1 : -1;\n        indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n      }\n\n      index += indexGap;\n\n      // make sure index is in range\n      if (carousel && loop) {\n        if (index < indexMin) { index += slideCount; }\n        if (index > indexMax) { index -= slideCount; }\n      }\n\n      // if index is changed, start rendering\n      if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n        render(e);\n      }\n\n    }\n  }\n\n  // on controls click\n  function onControlsClick (e, dir) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n    var passEventObject;\n\n    if (!dir) {\n      e = getEvent(e);\n      var target = getTarget(e);\n\n      while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n      var targetIn = [prevButton, nextButton].indexOf(target);\n      if (targetIn >= 0) {\n        passEventObject = true;\n        dir = targetIn === 0 ? -1 : 1;\n      }\n    }\n\n    if (rewind) {\n      if (index === indexMin && dir === -1) {\n        goTo('last', e);\n        return;\n      } else if (index === indexMax && dir === 1) {\n        goTo('first', e);\n        return;\n      }\n    }\n\n    if (dir) {\n      index += slideBy * dir;\n      if (autoWidth) { index = Math.floor(index); }\n      // pass e when click control buttons or keydown\n      render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n    }\n  }\n\n  // on nav click\n  function onNavClick (e) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n    \n    e = getEvent(e);\n    var target = getTarget(e), navIndex;\n\n    // find the clicked nav item\n    while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n    if (hasAttr(target, 'data-nav')) {\n      var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n          targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n          targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n      goTo(targetIndex, e);\n\n      if (navCurrentIndex === navIndex) {\n        if (animating) { stopAutoplay(); }\n        navClicked = -1; // reset navClicked\n      }\n    }\n  }\n\n  // autoplay functions\n  function setAutoplayTimer () {\n    autoplayTimer = setInterval(function () {\n      onControlsClick(null, autoplayDirection);\n    }, autoplayTimeout);\n\n    animating = true;\n  }\n\n  function stopAutoplayTimer () {\n    clearInterval(autoplayTimer);\n    animating = false;\n  }\n\n  function updateAutoplayButton (action, txt) {\n    setAttrs(autoplayButton, {'data-action': action});\n    autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n  }\n\n  function startAutoplay () {\n    setAutoplayTimer();\n    if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n  }\n\n  function stopAutoplay () {\n    stopAutoplayTimer();\n    if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n  }\n\n  // programaitcally play/pause the slider\n  function play () {\n    if (autoplay && !animating) {\n      startAutoplay();\n      autoplayUserPaused = false;\n    }\n  }\n  function pause () {\n    if (animating) {\n      stopAutoplay();\n      autoplayUserPaused = true;\n    }\n  }\n\n  function toggleAutoplay () {\n    if (animating) {\n      stopAutoplay();\n      autoplayUserPaused = true;\n    } else {\n      startAutoplay();\n      autoplayUserPaused = false;\n    }\n  }\n\n  function onVisibilityChange () {\n    if (doc.hidden) {\n      if (animating) {\n        stopAutoplayTimer();\n        autoplayVisibilityPaused = true;\n      }\n    } else if (autoplayVisibilityPaused) {\n      setAutoplayTimer();\n      autoplayVisibilityPaused = false;\n    }\n  }\n\n  function mouseoverPause () {\n    if (animating) { \n      stopAutoplayTimer();\n      autoplayHoverPaused = true;\n    }\n  }\n\n  function mouseoutRestart () {\n    if (autoplayHoverPaused) { \n      setAutoplayTimer();\n      autoplayHoverPaused = false;\n    }\n  }\n\n  // keydown events on document \n  function onDocumentKeydown (e) {\n    e = getEvent(e);\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n    if (keyIndex >= 0) {\n      onControlsClick(e, keyIndex === 0 ? -1 : 1);\n    }\n  }\n\n  // on key control\n  function onControlsKeydown (e) {\n    e = getEvent(e);\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n    if (keyIndex >= 0) {\n      if (keyIndex === 0) {\n        if (!prevButton.disabled) { onControlsClick(e, -1); }\n      } else if (!nextButton.disabled) {\n        onControlsClick(e, 1);\n      }\n    }\n  }\n\n  // set focus\n  function setFocus (el) {\n    el.focus();\n  }\n\n  // on key nav\n  function onNavKeydown (e) {\n    e = getEvent(e);\n    var curElement = doc.activeElement;\n    if (!hasAttr(curElement, 'data-nav')) { return; }\n\n    // var code = e.keyCode,\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n        navIndex = Number(getAttr(curElement, 'data-nav'));\n\n    if (keyIndex >= 0) {\n      if (keyIndex === 0) {\n        if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n      } else if (keyIndex === 1) {\n        if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n      } else {\n        navClicked = navIndex;\n        goTo(navIndex, e);\n      }\n    }\n  }\n\n  function getEvent (e) {\n    e = e || win.event;\n    return isTouchEvent(e) ? e.changedTouches[0] : e;\n  }\n  function getTarget (e) {\n    return e.target || win.event.srcElement;\n  }\n\n  function isTouchEvent (e) {\n    return e.type.indexOf('touch') >= 0;\n  }\n\n  function preventDefaultBehavior (e) {\n    e.preventDefault ? e.preventDefault() : e.returnValue = false;\n  }\n\n  function getMoveDirectionExpected () {\n    return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n  }\n\n  function onPanStart (e) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n\n    if (autoplay && animating) { stopAutoplayTimer(); }\n    \n    panStart = true;\n    if (rafIndex) {\n      caf(rafIndex);\n      rafIndex = null;\n    }\n\n    var $ = getEvent(e);\n    events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n    if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n      preventDefaultBehavior(e);\n    }\n\n    lastPosition.x = initPosition.x = $.clientX;\n    lastPosition.y = initPosition.y = $.clientY;\n    if (carousel) {\n      translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n      resetDuration(container, '0s');\n    }\n  }\n\n  function onPanMove (e) {\n    if (panStart) {\n      var $ = getEvent(e);\n      lastPosition.x = $.clientX;\n      lastPosition.y = $.clientY;\n\n      if (carousel) {\n        if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n      } else {\n        if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n        if (moveDirectionExpected) { preventScroll = true; }\n      }\n\n      if (preventScroll) { e.preventDefault(); }\n    }\n  }\n\n  function panUpdate (e) {\n    if (!moveDirectionExpected) {\n      panStart = false;\n      return;\n    }\n    caf(rafIndex);\n    if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n    if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n    if (moveDirectionExpected) {\n      if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n      try {\n        if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n      } catch(err) {}\n\n      var x = translateInit,\n          dist = getDist(lastPosition, initPosition);\n      if (!horizontal || fixedWidth || autoWidth) {\n        x += dist;\n        x += 'px';\n      } else {\n        var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n        x += percentageX;\n        x += '%';\n      }\n\n      container.style[transformAttr] = transformPrefix + x + transformPostfix;\n    }\n  }\n\n  function onPanEnd (e) {\n    if (panStart) {\n      if (rafIndex) {\n        caf(rafIndex);\n        rafIndex = null;\n      }\n      if (carousel) { resetDuration(container, ''); }\n      panStart = false;\n\n      var $ = getEvent(e);\n      lastPosition.x = $.clientX;\n      lastPosition.y = $.clientY;\n      var dist = getDist(lastPosition, initPosition);\n\n      if (Math.abs(dist)) {\n        // drag vs click\n        if (!isTouchEvent(e)) {\n          // prevent \"click\"\n          var target = getTarget(e);\n          addEvents(target, {'click': function preventClick (e) {\n            preventDefaultBehavior(e);\n            removeEvents(target, {'click': preventClick});\n          }}); \n        }\n\n        if (carousel) {\n          rafIndex = raf(function() {\n            if (horizontal && !autoWidth) {\n              var indexMoved = - dist * items / (viewport + gutter);\n              indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n              index += indexMoved;\n            } else {\n              var moved = - (translateInit + dist);\n              if (moved <= 0) {\n                index = indexMin;\n              } else if (moved >= slidePositions[slideCountNew - 1]) {\n                index = indexMax;\n              } else {\n                var i = 0;\n                while (i < slideCountNew && moved >= slidePositions[i]) {\n                  index = i;\n                  if (moved > slidePositions[i] && dist < 0) { index += 1; }\n                  i++;\n                }\n              }\n            }\n\n            render(e, dist);\n            events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n          });\n        } else {\n          if (moveDirectionExpected) {\n            onControlsClick(e, dist > 0 ? -1 : 1);\n          }\n        }\n      }\n    }\n\n    // reset\n    if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n    if (swipeAngle) { moveDirectionExpected = '?'; } \n    if (autoplay && !animating) { setAutoplayTimer(); }\n  }\n\n  // === RESIZE FUNCTIONS === //\n  // (slidePositions, index, items) => vertical_conentWrapper.height\n  function updateContentWrapperHeight () {\n    var wp = middleWrapper ? middleWrapper : innerWrapper;\n    wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n  }\n\n  function getPages () {\n    var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n    return Math.min(Math.ceil(rough), slideCount);\n  }\n\n  /*\n   * 1. update visible nav items list\n   * 2. add \"hidden\" attributes to previous visible nav items\n   * 3. remove \"hidden\" attrubutes to new visible nav items\n   */\n  function updateNavVisibility () {\n    if (!nav || navAsThumbnails) { return; }\n\n    if (pages !== pagesCached) {\n      var min = pagesCached,\n          max = pages,\n          fn = showElement;\n\n      if (pagesCached > pages) {\n        min = pages;\n        max = pagesCached;\n        fn = hideElement;\n      }\n\n      while (min < max) {\n        fn(navItems[min]);\n        min++;\n      }\n\n      // cache pages\n      pagesCached = pages;\n    }\n  }\n\n  function info (e) {\n    return {\n      container: container,\n      slideItems: slideItems,\n      navContainer: navContainer,\n      navItems: navItems,\n      controlsContainer: controlsContainer,\n      hasControls: hasControls,\n      prevButton: prevButton,\n      nextButton: nextButton,\n      items: items,\n      slideBy: slideBy,\n      cloneCount: cloneCount,\n      slideCount: slideCount,\n      slideCountNew: slideCountNew,\n      index: index,\n      indexCached: indexCached,\n      displayIndex: getCurrentSlide(),\n      navCurrentIndex: navCurrentIndex,\n      navCurrentIndexCached: navCurrentIndexCached,\n      pages: pages,\n      pagesCached: pagesCached,\n      sheet: sheet,\n      isOn: isOn,\n      event: e || {},\n    };\n  }\n\n  return {\n    version: '2.9.2',\n    getInfo: info,\n    events: events,\n    goTo: goTo,\n    play: play,\n    pause: pause,\n    isOn: isOn,\n    updateSliderHeight: updateInnerWrapperHeight,\n    refresh: initSliderTransform,\n    destroy: destroy,\n    rebuild: function() {\n      return tns(extend(options, optionsElements));\n    }\n  };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n  var doc = document, \n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      div = doc.createElement('div'), \n      result = false;\n\n  body.appendChild(div);\n  try {\n    var str = '(10px * 10)',\n        vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n        val;\n    for (var i = 0; i < 3; i++) {\n      val = vals[i];\n      div.style.width = val;\n      if (div.offsetWidth === 100) { \n        result = val.replace(str, ''); \n        break;\n      }\n    }\n  } catch (e) {}\n  \n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n  return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n  // check subpixel layout supporting\n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      wrapper = doc.createElement('div'),\n      outer = doc.createElement('div'),\n      str = '',\n      count = 70,\n      perPage = 3,\n      supported = false;\n\n  wrapper.className = \"tns-t-subp2\";\n  outer.className = \"tns-t-ct\";\n\n  for (var i = 0; i < count; i++) {\n    str += '<div></div>';\n  }\n\n  outer.innerHTML = str;\n  wrapper.appendChild(outer);\n  body.appendChild(wrapper);\n\n  supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n  body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n  return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      div = doc.createElement('div'),\n      style = doc.createElement('style'),\n      rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n      position;\n\n  style.type = 'text/css';\n  div.className = 'tns-mq-test';\n\n  body.appendChild(style);\n  body.appendChild(div);\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = rule;\n  } else {\n    style.appendChild(doc.createTextNode(rule));\n  }\n\n  position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n  return position === \"absolute\";\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n  if (!tf) { return false; }\n  if (!window.getComputedStyle) { return false; }\n  \n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      el = doc.createElement('p'),\n      has3d,\n      cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n  cssTF += 'transform';\n\n  // Add it to the body to get the computed style\n  body.insertBefore(el, null);\n\n  el.style[tf] = 'translate3d(1px,1px,1px)';\n  has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n  body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n  return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n  var id = window.tnsId;\n  window.tnsId = !id ? 1 : id + 1;\n  \n  return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media) {\n  // Create the <style> tag\n  var style = document.createElement(\"style\");\n  // style.setAttribute(\"type\", \"text/css\");\n\n  // Add a media (and/or media query) here if you'd like!\n  // style.setAttribute(\"media\", \"screen\")\n  // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n  if (media) { style.setAttribute(\"media\", media); }\n\n  // WebKit hack :(\n  // style.appendChild(document.createTextNode(\"\"));\n\n  // Add the <style> element to the page\n  document.querySelector('head').appendChild(style);\n\n  return style.sheet ? style.sheet : style.styleSheet;\n};","export function jsTransform(element, attr, prefix, postfix, to, duration, callback) {\n  var tick = Math.min(duration, 10),\n      unit = (to.indexOf('%') >= 0) ? '%' : 'px',\n      to = to.replace(unit, ''),\n      from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\n      positionTick = (to - from) / duration * tick,\n      running;\n\n  setTimeout(moveElement, tick);\n  function moveElement() {\n    duration -= tick;\n    from += positionTick;\n    element.style[attr] = prefix + from + unit + postfix;\n    if (duration > 0) { \n      setTimeout(moveElement, tick); \n    } else {\n      callback();\n    }\n  }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function removeCSSRule(sheet, index) {\n  // return raf(function() {\n    'deleteRule' in sheet ?\n      sheet.deleteRule(index) :\n      sheet.removeRule(index);\n  // });\n}","export function toDegree (y, x) {\n  return Math.atan2(y, x) * (180 / Math.PI);\n}","export function getTouchDirection(angle, range) {\n  var direction = false,\n      gap = Math.abs(90 - Math.abs(angle));\n      \n  if (gap >= 90 - range) {\n    direction = 'horizontal';\n  } else if (gap <= range) {\n    direction = 'vertical';\n  }\n\n  return direction;\n}","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\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        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        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 = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          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        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\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(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\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    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\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    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\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 C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","const defaultSettings = {\r\n    animationAttibute: 'data-aos',\r\n    reverseAttribute: 'data-aos-reverse',\r\n    thresholdAttribute: 'data-aos-threshold',\r\n};\r\nclass AOS {\r\n    constructor(settings = defaultSettings) {\r\n        this.defaultOptions = {\r\n            threshold: 0.6,\r\n            rootMargin: '-30px 0px',\r\n        };\r\n        this.createObserver = (elements, options) => {\r\n            const observer = new IntersectionObserver(entries => this.handleEntries(entries), options);\r\n            elements.forEach(element => observer.observe(element));\r\n        };\r\n        /* handle entries run when a new element is observed (comes into view) */\r\n        this.handleEntries = (entries) => {\r\n            entries.forEach(entry => {\r\n                const cssClass = entry.target.getAttribute(this.settings.animationAttibute);\r\n                const reverse = entry.target.getAttribute(this.settings.reverseAttribute) !== null;\r\n                if (!entry.isIntersecting) {\r\n                    if (reverse) {\r\n                        entry.target.classList.remove(cssClass);\r\n                    }\r\n                    return;\r\n                }\r\n                entry.target.classList.add(cssClass);\r\n            });\r\n        };\r\n        this.settings = settings;\r\n        const elements = document.querySelectorAll(`[${this.settings.animationAttibute}]`);\r\n        if (elements.length === 0) {\r\n            return;\r\n        }\r\n        // Gets a set of grouped elements using the anim-thresholds (threshold for intersection observer)\r\n        const groupedElements = groupBy(Array.from(elements), element => element.getAttribute(this.settings.thresholdAttribute));\r\n        groupedElements.forEach((value, key) => {\r\n            const options = { ...this.defaultOptions };\r\n            const threshold = parseFloat(key);\r\n            if (!isNaN(threshold) && threshold < 1.0) {\r\n                options.threshold = threshold;\r\n            }\r\n            this.createObserver(value, options);\r\n        });\r\n    }\r\n}\r\n// Groups the given array using the expression\r\nfunction groupBy(array, expression) {\r\n    const map = new Map();\r\n    array.forEach(item => {\r\n        const key = expression(item);\r\n        const collection = map.get(key);\r\n        if (!collection) {\r\n            map.set(key, [item]);\r\n        }\r\n        else {\r\n            collection.push(item);\r\n        }\r\n    });\r\n    return map;\r\n}\r\nexport default AOS;\r\n","// Object.keys\nif (!Object.keys) {\n  Object.keys = function(object) {\n    var keys = [];\n    for (var name in object) {\n      if (Object.prototype.hasOwnProperty.call(object, name)) {\n        keys.push(name);\n      }\n    }\n    return keys;\n  };\n}","// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n  Element.prototype.remove = function(){\n    if(this.parentNode) {\n      this.parentNode.removeChild(this);\n    }\n  };\n}"],"sourceRoot":""}