{"version":3,"file":"js/application-b4f391be801c2894c324.js","sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/packs/jquery.carouFredSel-5.6.1.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./app/javascript/packs/application.js\");\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./app/javascript/channels sync recursive _channel\\\\.js$\";","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\nimport Rails from \"@rails/ujs\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport \"channels\"\n\n\nRails.start()\nActiveStorage.start()\n\nimport \"bootstrap\"\n\n// export jquery to global\nvar jQuery = require('jquery')\nrequire(\"packs/jquery.carouFredSel-5.6.1\")\n\n// include jQuery in global and window scope (so you can access it globally)\n// in your web browser, when you type $('.div'), it is actually refering to global.$('.div')\nglobal.$ = global.jQuery = jQuery;\nwindow.$ = window.jQuery = jQuery;\n","/*\t\n *\tjQuery carouFredSel 5.6.1\n *\tDemo's and documentation:\n *\tcaroufredsel.frebsite.nl\n *\t\n *\tCopyright (c) 2012 Fred Heusschen\n *\twww.frebsite.nl\n *\n *\tDual licensed under the MIT and GPL licenses.\n *\thttp://en.wikipedia.org/wiki/MIT_License\n *\thttp://en.wikipedia.org/wiki/GNU_General_Public_License\n */\n\n\n(function($) {\n\n\n\n\t//\tLOCAL\n\n\tif ($.fn.carouFredSel) return;\n\n\t$.fn.carouFredSel = function(options, configs) {\n\t\tif (this.length == 0) {\n\t\t\tdebug(true, 'No element found for \"'+this.selector+'\".');\n\t\t\treturn this;\n\t\t}\n\t\tif (this.length > 1) {\n\t\t\treturn this.each(function() {\n\t\t\t\t$(this).carouFredSel(options, configs);\n\t\t\t});\n\t\t}\n\n\t\tvar $cfs = this,\n\t\t\t$tt0 = this[0];\n\n\t\tif ($cfs.data('cfs_isCarousel')) {\n\t\t\tvar starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition');\n\t\t\t$cfs.trigger('_cfs_triggerEvent', ['destroy', true]);\n\t\t} else {\n\t\t\tvar starting_position = false;\n\t\t}\n\n\t\t$cfs._cfs_init = function(o, setOrig, start) {\n\t\t\to = go_getObject($tt0, o);\n\n\t\t\tvar obs = ['items', 'scroll', 'auto', 'prev', 'next', 'pagination'];\n\t\t\tfor (var a = 0, l = obs.length; a < l; a++) {\n\t\t\t\to[obs[a]] = go_getObject($tt0, o[obs[a]]);\n\t\t\t}\n\n\t\t\tif (typeof o.scroll == 'number') {\n\t\t\t\tif (o.scroll <= 50)\t\t\t\t\to.scroll\t= { 'items'\t\t: o.scroll \t};\n\t\t\t\telse\t\t\t\t\t\t\t\to.scroll\t= { 'duration'\t: o.scroll \t};\n\t\t\t} else {\n\t\t\t\tif (typeof o.scroll == 'string')\to.scroll\t= { 'easing'\t: o.scroll \t};\n\t\t\t}\n\n\t\t\t\t if (typeof o.items == 'number')\to.items\t\t= { 'visible'\t: o.items \t};\n\t\t\telse if (\t\to.items == 'variable')\to.items\t\t= { 'visible'\t: o.items,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'width'\t\t: o.items, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'height'\t: o.items\t};\n\n\t\t\tif (typeof o.items != 'object') o.items = {};\n\t\t\tif (setOrig) opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o);\n\n\t\t\topts = $.extend(true, {}, $.fn.carouFredSel.defaults, o);\n\n\t\t\tif (typeof opts.items.visibleConf != 'object') opts.items.visibleConf = {};\n\n\t\t\tif (opts.items.start == 0 && typeof start == 'number') {\n\t\t\t\topts.items.start = start;\n\t\t\t}\n\n\t\t\tcrsl.upDateOnWindowResize = (opts.responsive);\n\t\t\tcrsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev';\n\n\t\t\tvar dims = [\n\t\t\t\t['width'\t, 'innerWidth'\t, 'outerWidth'\t, 'height'\t, 'innerHeight'\t, 'outerHeight'\t, 'left', 'top'\t, 'marginRight'\t, 0, 1, 2, 3],\n\t\t\t\t['height'\t, 'innerHeight'\t, 'outerHeight'\t, 'width'\t, 'innerWidth'\t, 'outerWidth'\t, 'top'\t, 'left', 'marginBottom', 3, 2, 1, 0]\n\t\t\t];\n\n\t\t\tvar dn = dims[0].length,\n\t\t\t\tdx = (opts.direction == 'right' || opts.direction == 'left') ? 0 : 1;\n\n\t\t\topts.d = {};\n\t\t\tfor (var d = 0; d < dn; d++) {\n\t\t\t\topts.d[dims[0][d]] = dims[dx][d];\n\t\t\t}\n\n\t\t\tvar\tall_itm = $cfs.children();\n\n\n\t\t\t//\tcheck visible items\n\t\t\tswitch (typeof opts.items.visible) {\n\n\t\t\t\t//\tmin and max visible items\n\t\t\t\tcase 'object':\n\t\t\t\t\topts.items.visibleConf.min = opts.items.visible.min;\n\t\t\t\t\topts.items.visibleConf.max = opts.items.visible.max;\n\t\t\t\t\topts.items.visible = false;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'string':\n\t\t\t\t\t//\tvariable visible items\n\t\t\t\t\tif (opts.items.visible == 'variable') {\n\t\t\t\t\t\topts.items.visibleConf.variable = true;\n\n\t\t\t\t\t//\tadjust string visible items\n\t\t\t\t\t} else {\n\t\t\t\t\t\topts.items.visibleConf.adjust = opts.items.visible;\n\t\t\t\t\t}\n\t\t\t\t\topts.items.visible = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// function visible items\n\t\t\t\tcase 'function':\n\t\t\t\t\topts.items.visibleConf.adjust = opts.items.visible;\n\t\t\t\t\topts.items.visible = false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t//\tset items filter\n\t\t\tif (typeof opts.items.filter == 'undefined') {\n\t\t\t\topts.items.filter = (all_itm.filter(':hidden').length > 0) ? ':visible' : '*';\n\t\t\t}\n\n\t\t\t//\tprimary size set to auto -> measure largest size and set it\n\t\t\tif (opts[opts.d['width']] == 'auto') {\n\t\t\t\topts[opts.d['width']] = ms_getTrueLargestSize(all_itm, opts, 'outerWidth');\n\t\t\t}\n\t\t\t//\tprimary size percentage\n\t\t\tif (ms_isPercentage(opts[opts.d['width']]) && !opts.responsive) {\n\t\t\t\topts[opts.d['width']] = ms_getPercentage(ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth'), opts[opts.d['width']]);\n\t\t\t\tcrsl.upDateOnWindowResize = true;\n\t\t\t}\n\n\t\t\t//\tsecondary size set to auto -> measure largest size and set it\n\t\t\tif (opts[opts.d['height']] == 'auto') {\n\t\t\t\topts[opts.d['height']] = ms_getTrueLargestSize(all_itm, opts, 'outerHeight');\n\t\t\t}\n\n\t\t\t//\tprimary item-size not set\n\t\t\tif (!opts.items[opts.d['width']]) {\n//\tresponsive carousel -> set to largest\nif (opts.responsive) {\n\tdebug(true, 'Set a '+opts.d['width']+' for the items!');\n\topts.items[opts.d['width']] = ms_getTrueLargestSize(all_itm, opts, 'outerWidth');\n\t\t\t\t//\t non-responsive -> measure it or set to \"variable\"\n} else {\n\t\t\t\topts.items[opts.d['width']] = (ms_hasVariableSizes(all_itm, opts, 'outerWidth')) \n\t\t\t\t\t? 'variable' \n\t\t\t\t\t: all_itm[opts.d['outerWidth']](true);\n}\n\t\t\t}\n\n\t\t\t//\tsecondary item-size not set -> measure it or set to \"variable\"\n\t\t\tif (!opts.items[opts.d['height']]) {\n\t\t\t\topts.items[opts.d['height']] = (ms_hasVariableSizes(all_itm, opts, 'outerHeight')) \n\t\t\t\t\t? 'variable' \n\t\t\t\t\t: all_itm[opts.d['outerHeight']](true);\n\t\t\t}\n\n\t\t\t//\tsecondary size not set -> set to secondary item-size\n\t\t\tif (!opts[opts.d['height']]) {\n\t\t\t\topts[opts.d['height']] = opts.items[opts.d['height']];\n\t\t\t}\n\n\t\t\t//\tvisible-items not set\n\t\t\tif (!opts.items.visible && !opts.responsive) {\n\t\t\t\t//\tprimary item-size variable -> set visible items variable\n\t\t\t\tif (opts.items[opts.d['width']] == 'variable') {\n\t\t\t\t\topts.items.visibleConf.variable = true;\n\t\t\t\t}\n\t\t\t\tif (!opts.items.visibleConf.variable) {\n\t\t\t\t\t//\tprimary size is number -> calculate visible-items\n\t\t\t\t\tif (typeof opts[opts.d['width']] == 'number') {\n\t\t\t\t\t\topts.items.visible = Math.floor(opts[opts.d['width']] / opts.items[opts.d['width']]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//\tmeasure and calculate primary size and visible-items\n\t\t\t\t\t\tvar maxS = ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth');\n\t\t\t\t\t\topts.items.visible = Math.floor(maxS / opts.items[opts.d['width']]);\n\t\t\t\t\t\topts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']];\n\t\t\t\t\t\tif (!opts.items.visibleConf.adjust) opts.align = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.items.visible == 'Infinity' || opts.items.visible < 1) {\n\t\t\t\t\t\tdebug(true, 'Not a valid number of visible items: Set to \"variable\".');\n\t\t\t\t\t\topts.items.visibleConf.variable = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//\tprimary size not set -> calculate it or set to \"variable\"\n\t\t\tif (!opts[opts.d['width']]) {\n\t\t\t\topts[opts.d['width']] = 'variable';\n\t\t\t\tif (!opts.responsive && opts.items.filter == '*' && !opts.items.visibleConf.variable && opts.items[opts.d['width']] != 'variable') {\n\t\t\t\t\topts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']];\n\t\t\t\t\topts.align = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//\tvariable primary item-sizes with variabe visible-items\n\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\topts.maxDimention = (opts[opts.d['width']] == 'variable')\n\t\t\t\t\t? ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth')\n\t\t\t\t\t: opts[opts.d['width']];\n\t\t\t\tif (opts.align === false) {\n\t\t\t\t\topts[opts.d['width']] = 'variable';\n\t\t\t\t}\n\t\t\t\topts.items.visible = gn_getVisibleItemsNext(all_itm, opts, 0);\n\n\t\t\t//\tset visible items by filter\n\t\t\t} else if (opts.items.filter != '*') {\n\t\t\t\topts.items.visibleConf.org = opts.items.visible;\n\t\t\t\topts.items.visible = gn_getVisibleItemsNextFilter(all_itm, opts, 0);\n\t\t\t}\n\n\t\t\t//\talign not set -> set to center if primary size is number\n\t\t\tif (typeof opts.align == 'undefined') {\n\t\t\t\topts.align = (opts[opts.d['width']] == 'variable')\n\t\t\t\t\t? false\n\t\t\t\t\t: 'center';\n\t\t\t}\n\n\t\t\topts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\topts.items.visibleConf.old = opts.items.visible;\n\t\t\topts.usePadding = false;\n\n\nif (opts.responsive) {\n\n\tif (!opts.items.visibleConf.min) opts.items.visibleConf.min = opts.items.visible;\n\tif (!opts.items.visibleConf.max) opts.items.visibleConf.max = opts.items.visible;\n\n\topts.align = false;\n\topts.padding = [0, 0, 0, 0];\n\n\tvar isVisible = $wrp.is(':visible');\n\tif (isVisible) $wrp.hide();\n\tvar fullS = ms_getPercentage(ms_getTrueInnerSize($wrp.parent(), opts, 'innerWidth'), opts[opts.d['width']]);\n\n\tif (typeof opts[opts.d['width']] == 'number' && fullS < opts[opts.d['width']]) {\n\t\tfullS = opts[opts.d['width']];\n\t}\n\tif (isVisible) $wrp.show();\n\n\tvar visb = cf_getItemAdjustMinMax(Math.ceil(fullS / opts.items[opts.d['width']]), opts.items.visibleConf);\n\tif (visb > all_itm.length) {\n\t\tvisb = all_itm.length;\n\t}\n\n\tvar newS = Math.floor(fullS/visb),\n\t\tseco = opts[opts.d['height']],\n\t\tsecp = ms_isPercentage(seco);\n\n\tall_itm.each(function() {\n\t\tvar $t = $(this),\n\t\t\tnw = newS - ms_getPaddingBorderMargin($t, opts, 'Width');\n\n\t\t$t[opts.d['width']](nw);\n\t\tif (secp) {\n\t\t\t$t[opts.d['height']](ms_getPercentage(nw, seco));\n\t\t}\n\t});\n\n\topts.items.visible = visb;\n\topts.items[opts.d['width']] = newS;\n\topts[opts.d['width']] = visb * newS;\n\t\n} else {\n\n\t\t\topts.padding = cf_getPadding(opts.padding);\n\n\t\t\tif (opts.align == 'top') \t\topts.align = 'left';\n\t\t\tif (opts.align == 'bottom') \topts.align = 'right';\n\n\n\t\t\tswitch (opts.align) {\n\t\t\t\t//\talign: center, left or right\n\t\t\t\tcase 'center':\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'right':\n\t\t\t\t\tif (opts[opts.d['width']] != 'variable') {\n\t\t\t\t\t\tvar p = cf_getAlignPadding(gi_getCurrentItems(all_itm, opts), opts);\n\t\t\t\t\t\topts.usePadding = true;\n\t\t\t\t\t\topts.padding[opts.d[1]] = p[1];\n\t\t\t\t\t\topts.padding[opts.d[3]] = p[0];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\t//\tpadding\n\t\t\t\tdefault:\n\t\t\t\t\topts.align = false;\n\t\t\t\t\topts.usePadding = (\n\t\t\t\t\t\topts.padding[0] == 0 && \n\t\t\t\t\t\topts.padding[1] == 0 && \n\t\t\t\t\t\topts.padding[2] == 0 && \n\t\t\t\t\t\topts.padding[3] == 0\n\t\t\t\t\t) ? false : true;\n\t\t\t\t\tbreak;\n\t\t\t}\n}\n\n\t\t\tif (typeof opts.cookie == 'boolean' && opts.cookie)\t\t\topts.cookie \t\t\t\t\t= 'caroufredsel_cookie_'+$cfs.attr('id');\n\t\t\tif (typeof opts.items.minimum\t\t\t\t!= 'number')\topts.items.minimum\t\t\t\t= opts.items.visible;\n\t\t\tif (typeof opts.scroll.duration\t\t\t\t!= 'number')\topts.scroll.duration\t\t\t= 500;\n\t\t\tif (typeof opts.scroll.items\t\t\t\t== 'undefined') opts.scroll.items \t\t\t\t= (opts.items.visibleConf.variable || opts.items.filter != '*') ? 'visible' : opts.items.visible;\n\n\t\t\topts.auto\t\t= go_getNaviObject($tt0, opts.auto, 'auto');\n\t\t\topts.prev\t\t= go_getNaviObject($tt0, opts.prev);\n\t\t\topts.next\t\t= go_getNaviObject($tt0, opts.next);\n\t\t\topts.pagination\t= go_getNaviObject($tt0, opts.pagination, 'pagination');\n\n\t\t\topts.auto\t\t= $.extend(true, {}, opts.scroll, opts.auto);\n\t\t\topts.prev\t\t= $.extend(true, {}, opts.scroll, opts.prev);\n\t\t\topts.next\t\t= $.extend(true, {}, opts.scroll, opts.next);\n\t\t\topts.pagination\t= $.extend(true, {}, opts.scroll, opts.pagination);\n\n\t\t\tif (typeof opts.pagination.keys\t\t\t\t!= 'boolean')\topts.pagination.keys \t\t\t= false;\n\t\t\tif (typeof opts.pagination.anchorBuilder\t!= 'function'\n\t\t\t\t\t&& opts.pagination.anchorBuilder\t!== false)\t\topts.pagination.anchorBuilder\t= $.fn.carouFredSel.pageAnchorBuilder;\n\t\t\tif (typeof opts.auto.play\t\t\t\t\t!= 'boolean')\topts.auto.play\t\t\t\t\t= true;\n\t\t\tif (typeof opts.auto.delay\t\t\t\t\t!= 'number')\topts.auto.delay\t\t\t\t\t= 0;\n\t\t\tif (typeof opts.auto.pauseOnEvent \t\t\t== 'undefined')\topts.auto.pauseOnEvent\t\t\t= true;\n\t\t\tif (typeof opts.auto.pauseOnResize \t\t\t!= 'boolean')\topts.auto.pauseOnResize\t\t\t= true;\n\t\t\tif (typeof opts.auto.pauseDuration\t\t\t!= 'number')\topts.auto.pauseDuration\t\t\t= (opts.auto.duration < 10) ? 2500 : opts.auto.duration * 5;\n\n\t\t\tif (opts.synchronise) {\n\t\t\t\topts.synchronise = cf_getSynchArr(opts.synchronise);\n\t\t\t}\n\t\t\tif (conf.debug) {\n\t\t\t\tdebug(conf, 'Carousel width: '+opts.width);\n\t\t\t\tdebug(conf, 'Carousel height: '+opts.height);\n\t\t\t\tif (opts.maxDimention)\tdebug(conf, 'Available '+opts.d['width']+': '+opts.maxDimention);\n\t\t\t\tdebug(conf, 'Item widths: '+opts.items.width);\n\t\t\t\tdebug(conf, 'Item heights: '+opts.items.height);\n\t\t\t\tdebug(conf, 'Number of items visible: '+opts.items.visible);\n\t\t\t\tif (opts.auto.play)\t\tdebug(conf, 'Number of items scrolled automatically: '+opts.auto.items);\n\t\t\t\tif (opts.prev.button)\tdebug(conf, 'Number of items scrolled backward: '+opts.prev.items);\n\t\t\t\tif (opts.next.button)\tdebug(conf, 'Number of items scrolled forward: '+opts.next.items);\n\t\t\t}\n\t\t};\t//\t/init\n\n\t\t$cfs._cfs_build = function() {\n\t\t\t$cfs.data('cfs_isCarousel', true);\n\n\t\t\tvar orgCSS = {\n\t\t\t\t'textAlign'\t\t: $cfs.css('textAlign'),\n\t\t\t\t'float'\t\t\t: $cfs.css('float'),\n\t\t\t\t'position'\t\t: $cfs.css('position'),\n\t\t\t\t'top'\t\t\t: $cfs.css('top'),\n\t\t\t\t'right'\t\t\t: $cfs.css('right'),\n\t\t\t\t'bottom'\t\t: $cfs.css('bottom'),\n\t\t\t\t'left'\t\t\t: $cfs.css('left'),\n\t\t\t\t'width'\t\t\t: $cfs.css('width'),\n\t\t\t\t'height'\t\t: $cfs.css('height'),\n\t\t\t\t'marginTop'\t\t: $cfs.css('marginTop'),\n\t\t\t\t'marginRight'\t: $cfs.css('marginRight'),\n\t\t\t\t'marginBottom'\t: $cfs.css('marginBottom'),\n\t\t\t\t'marginLeft'\t: $cfs.css('marginLeft')\n\t\t\t};\n\n\t\t\tswitch (orgCSS.position) {\n\t\t\t\tcase 'absolute':\n\t\t\t\t\tvar newPosition = 'absolute';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'fixed':\n\t\t\t\t\tvar newPosition = 'fixed';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar newPosition = 'relative';\n\t\t\t} \n\n\t\t\t$wrp.css(orgCSS).css({\n\t\t\t\t'overflow'\t\t: 'hidden',\n\t\t\t\t'position'\t\t: newPosition\n\t\t\t});\n\n\t\t\t$cfs.data('cfs_origCss', orgCSS).css({\n\t\t\t\t'textAlign'\t\t: 'left',\n\t\t\t\t'float'\t\t\t: 'none',\n\t\t\t\t'position'\t\t: 'absolute',\n\t\t\t\t'top'\t\t\t: 0,\n\t\t\t\t'left'\t\t\t: 0,\n\t\t\t\t'marginTop'\t\t: 0,\n\t\t\t\t'marginRight'\t: 0,\n\t\t\t\t'marginBottom'\t: 0,\n\t\t\t\t'marginLeft'\t: 0\n\t\t\t});\n\n\t\t\tif (opts.usePadding) {\n\t\t\t\t$cfs.children().each(function() {\n\t\t\t\t\tvar m = parseInt($(this).css(opts.d['marginRight']));\n\t\t\t\t\tif (isNaN(m)) m = 0;\n\t\t\t\t\t$(this).data('cfs_origCssMargin', m);\n\t\t\t\t});\n\t\t\t}\n\n\t\t};\t//\t/build\n\n\t\t$cfs._cfs_bind_events = function() {\n\t\t\t$cfs._cfs_unbind_events();\n\n\t\t\t//\tstop event\n\t\t\t$cfs.bind(cf_e('stop', conf), function(e, imm) {\n\t\t\t\te.stopPropagation();\n\n\t\t\t\t//\tbutton\n\t\t\t\tif (!crsl.isStopped) {\n\t\t\t\t\tif (opts.auto.button) {\n\t\t\t\t\t\topts.auto.button.addClass(cf_c('stopped', conf));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tset stopped\n\t\t\t\tcrsl.isStopped = true;\n\n\t\t\t\tif (opts.auto.play) {\n\t\t\t\t\topts.auto.play = false;\n\t\t\t\t\t$cfs.trigger(cf_e('pause', conf), imm);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tfinish event\n\t\t\t$cfs.bind(cf_e('finish', conf), function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (crsl.isScrolling) {\n\t\t\t\t\tsc_stopScroll(scrl);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tpause event\n\t\t\t$cfs.bind(cf_e('pause', conf), function(e, imm, res) {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttmrs = sc_clearTimers(tmrs);\n\n\t\t\t\t//\timmediately pause\n\t\t\t\tif (imm && crsl.isScrolling) {\n\t\t\t\t\tscrl.isStopped = true;\n\t\t\t\t\tvar nst = getTime() - scrl.startTime;\n\t\t\t\t\tscrl.duration -= nst;\n\t\t\t\t\tif (scrl.pre) scrl.pre.duration -= nst;\n\t\t\t\t\tif (scrl.post) scrl.post.duration -= nst;\n\t\t\t\t\tsc_stopScroll(scrl, false);\n\t\t\t\t}\n\n\t\t\t\t//\tupdate remaining pause-time\n\t\t\t\tif (!crsl.isPaused && !crsl.isScrolling) {\n\t\t\t\t\tif (res) tmrs.timePassed += getTime() - tmrs.startTime;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//\tbutton\n\t\t\t\tif (!crsl.isPaused) {\n\t\t\t\t\tif (opts.auto.button) {\n\t\t\t\t\t\topts.auto.button.addClass(cf_c('paused', conf));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tset paused\n\t\t\t\tcrsl.isPaused = true;\n\n\t\t\t\t//\tpause pause callback\n\t\t\t\tif (opts.auto.onPausePause) {\n\t\t\t\t\tvar dur1 = opts.auto.pauseDuration - tmrs.timePassed,\n\t\t\t\t\t\tperc = 100 - Math.ceil( dur1 * 100 / opts.auto.pauseDuration );\n\t\t\t\t\topts.auto.onPausePause.call($tt0, perc, dur1);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tplay event\n\t\t\t$cfs.bind(cf_e('play', conf), function(e, dir, del, res) {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttmrs = sc_clearTimers(tmrs);\n\n\t\t\t\t//\tsort params\n\t\t\t\tvar v = [dir, del, res],\n\t\t\t\t\tt = ['string', 'number', 'boolean'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\n\t\t\t\tvar dir = a[0],\n\t\t\t\t\tdel = a[1],\n\t\t\t\t\tres = a[2];\n\n\t\t\t\tif (dir != 'prev' && dir != 'next') dir = crsl.direction;\n\t\t\t\tif (typeof del != 'number') \t\tdel = 0;\n\t\t\t\tif (typeof res != 'boolean') \t\tres = false;\n\n\t\t\t\t//\tstopped?\n\t\t\t\tif (res) {\n\t\t\t\t\tcrsl.isStopped = false;\n\t\t\t\t\topts.auto.play = true;\n\t\t\t\t}\n\t\t\t\tif (!opts.auto.play) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, 'Carousel stopped: Not scrolling.');\n\t\t\t\t}\n\n\t\t\t\t//\tbutton\n\t\t\t\tif (crsl.isPaused) {\n\t\t\t\t\tif (opts.auto.button) {\n\t\t\t\t\t\topts.auto.button.removeClass(cf_c('stopped', conf));\n\t\t\t\t\t\topts.auto.button.removeClass(cf_c('paused', conf));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tset playing\n\t\t\t\tcrsl.isPaused = false;\n\t\t\t\ttmrs.startTime = getTime();\n\n\t\t\t\t//\ttimeout the scrolling\n\t\t\t\tvar dur1 = opts.auto.pauseDuration + del;\n\t\t\t\t\tdur2 = dur1 - tmrs.timePassed;\n\t\t\t\t\tperc = 100 - Math.ceil(dur2 * 100 / dur1);\n\n\t\t\t\ttmrs.auto = setTimeout(function() {\n\t\t\t\t\tif (opts.auto.onPauseEnd) {\n\t\t\t\t\t\topts.auto.onPauseEnd.call($tt0, perc, dur2);\n\t\t\t\t\t}\n\t\t\t\t\tif (crsl.isScrolling) {\n\t\t\t\t\t\t$cfs.trigger(cf_e('play', conf), dir);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$cfs.trigger(cf_e(dir, conf), opts.auto);\n\t\t\t\t\t}\n\t\t\t\t}, dur2);\n\n\t\t\t\t//\tpause start callback\n\t\t\t\tif (opts.auto.onPauseStart) {\n\t\t\t\t\topts.auto.onPauseStart.call($tt0, perc, dur2);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tresume event\n\t\t\t$cfs.bind(cf_e('resume', conf), function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (scrl.isStopped) {\n\t\t\t\t\tscrl.isStopped = false;\n\t\t\t\t\tcrsl.isPaused = false;\n\t\t\t\t\tcrsl.isScrolling = true;\n\t\t\t\t\tscrl.startTime = getTime();\n\t\t\t\t\tsc_startScroll(scrl);\n\t\t\t\t} else {\n\t\t\t\t\t$cfs.trigger(cf_e('play', conf));\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tprev + next events\n\t\t\t$cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb) {\n\t\t\t\te.stopPropagation();\n\n\t\t\t\t//\tstopped or hidden carousel, don't scroll, don't queue\n\t\t\t\tif (crsl.isStopped || $cfs.is(':hidden')) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, 'Carousel stopped or hidden: Not scrolling.');\n\t\t\t\t}\n\n\t\t\t\t//\tnot enough items\n\t\t\t\tif (opts.items.minimum >= itms.total) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, 'Not enough items ('+itms.total+', '+opts.items.minimum+' needed): Not scrolling.');\n\t\t\t\t}\n\n\t\t\t\t//\tget config\n\t\t\t\tvar v = [obj, num, clb],\n\t\t\t\t\tt = ['object', 'number/string', 'function'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\n\t\t\t\tvar obj = a[0],\n\t\t\t\t\tnum = a[1],\n\t\t\t\t\tclb = a[2];\n\n\t\t\t\tvar eType = e.type.slice(conf.events.prefix.length);\n\n\t\t\t\tif (typeof obj != 'object' || obj == null)\tobj = opts[eType];\n\t\t\t\tif (typeof clb == 'function')\t\t\t\tobj.onAfter = clb;\n\n\t\t\t\tif (typeof num != 'number') {\n\t\t\t\t\tif (opts.items.filter != '*') {\n\t\t\t\t\t\tnum = 'visible';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar arr = [num, obj.items, opts[eType].items];\n\t\t\t\t\t\tfor (var a = 0, l = arr.length; a < l; a++) {\n\t\t\t\t\t\t\tif (typeof arr[a] == 'number' || arr[a] == 'page' || arr[a] == 'visible') {\n\t\t\t\t\t\t\t\tnum = arr[a];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tswitch(num) {\n\t\t\t\t\t\tcase 'page':\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\treturn $cfs.triggerHandler(eType+'Page', [obj, clb]);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\t\tif (!opts.items.visibleConf.variable && opts.items.filter == '*') {\n\t\t\t\t\t\t\t\tnum = opts.items.visible;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tresume animation, add current to queue\n\t\t\t\tif (scrl.isStopped) {\n\t\t\t\t\t$cfs.trigger(cf_e('resume', conf));\n\t\t\t\t\t$cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, 'Carousel resumed scrolling.');\n\t\t\t\t}\n\n\t\t\t\t//\tqueue if scrolling\n\t\t\t\tif (obj.duration > 0) {\n\t\t\t\t\tif (crsl.isScrolling) {\n\t\t\t\t\t\tif (obj.queue) $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\treturn debug(conf, 'Carousel currently scrolling.');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\ttest conditions callback\n\t\t\t\tif (obj.conditions && !obj.conditions.call($tt0)) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, 'Callback \"conditions\" returned false.');\n\t\t\t\t}\n\n\t\t\t\ttmrs.timePassed = 0;\n\t\t\t\t$cfs.trigger('_cfs_triggerEvent', ['slide_'+eType, [obj, num]]);\n\n\t\t\t\t//\tsynchronise\n\t\t\t\tif (opts.synchronise) {\n\t\t\t\t\tvar s = opts.synchronise,\n\t\t\t\t\t\tc = [obj, num];\n\t\t\t\t\tfor (var j = 0, l = s.length; j < l; j++) {\n\t\t\t\t\t\tvar d = eType;\n\n\t\t\t\t\t\tif (!s[j][1]) c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', d]);\n\t\t\t\t\t\tif (!s[j][2]) d = (d == 'prev') ? 'next' : 'prev';\n\t\t\t\t\t\tc[1] = num + s[j][3];\n\t\t\t\t\t\ts[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, c]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tprev event\n\t\t\t$cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar a_itm = $cfs.children();\n\n\t\t\t\t//\tnon-circular at start, scroll to end\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (itms.first == 0) {\n\t\t\t\t\t\tif (opts.infinite) {\n\t\t\t\t\t\t\t$cfs.trigger(cf_e('next', conf), itms.total-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn e.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts);\n\n\t\t\t\t//\tfind number of items to scroll\n\t\t\t\tif (typeof nI != 'number') {\n\t\t\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\t\t\tnI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1);\n\t\t\t\t\t} else if (opts.items.filter != '*') {\n\t\t\t\t\t\tvar xI = (typeof sO.items == 'number') ? sO.items : gn_getVisibleOrg($cfs, opts);\n\t\t\t\t\t\tnI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnI = opts.items.visible;\n\t\t\t\t\t}\n\t\t\t\t\tnI = cf_getAdjust(nI, opts, sO.items, $tt0);\n\t\t\t\t}\n\n\t\t\t\t//\tprevent non-circular from scrolling to far\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (itms.total - nI < itms.first) {\n\t\t\t\t\t\tnI = itms.total - itms.first;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tset new number of visible items\n\t\t\t\topts.items.visibleConf.old = opts.items.visible;\n\t\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\t\tvar vI = gn_getVisibleItemsNext(a_itm, opts, itms.total-nI);\n\t\t\t\t\tif (opts.items.visible+nI <= vI && nI < itms.total) {\n\t\t\t\t\t\tnI++;\n\t\t\t\t\t\tvI = gn_getVisibleItemsNext(a_itm, opts, itms.total-nI);\n\t\t\t\t\t}\n\t\t\t\t\topts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\t\t} else if (opts.items.filter != '*') {\n\t\t\t\t\tvar vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI);\n\t\t\t\t\topts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\t\t}\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts, true);\n\n\t\t\t\t//\tscroll 0, don't scroll\n\t\t\t\tif (nI == 0) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, '0 items to scroll: Not scrolling.');\n\t\t\t\t}\n\t\t\t\tdebug(conf, 'Scrolling '+nI+' items backward.');\n\n\t\t\t\t//\tsave new config\n\t\t\t\titms.first += nI;\n\t\t\t\twhile (itms.first >= itms.total) {\n\t\t\t\t\titms.first -= itms.total;\n\t\t\t\t}\n\n\t\t\t\t//\tnon-circular callback\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (itms.first == 0 && sO.onEnd) sO.onEnd.call($tt0);\n\t\t\t\t\tif (!opts.infinite) nv_enableNavi(opts, itms.first, conf);\n\t\t\t\t}\n\n\t\t\t\t//\trearrange items\n\t\t\t\t$cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs);\n\t\t\t\tif (itms.total < opts.items.visible + nI) {\n\t\t\t\t\t$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);\n\t\t\t\t}\n\n\t\t\t\t//\tthe needed items\n\t\t\t\tvar a_itm = $cfs.children(),\n\t\t\t\t\tc_old = gi_getOldItemsPrev(a_itm, opts, nI),\n\t\t\t\t\tc_new = gi_getNewItemsPrev(a_itm, opts),\n\t\t\t\t\tl_cur = a_itm.eq(nI-1),\n\t\t\t\t\tl_old = c_old.last(),\n\t\t\t\t\tl_new = c_new.last();\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts);\n\t\t\t\tif (opts.align) {\n\t\t\t\t\tvar p = cf_getAlignPadding(c_new, opts),\n\t\t\t\t\t\tpL = p[0],\n\t\t\t\t\t\tpR = p[1];\n\t\t\t\t} else {\n\t\t\t\t\tvar pL = 0,\n\t\t\t\t\t\tpR = 0;\n\t\t\t\t}\n\t\t\t\tvar oL = (pL < 0) ? opts.padding[opts.d[3]] : 0;\n\n\t\t\t\t//\thide items for fx directscroll\n\t\t\t\tif (sO.fx == 'directscroll' && opts.items.visible < nI) {\n\t\t\t\t\tvar hiddenitems = a_itm.slice(opts.items.visibleConf.old, nI),\n\t\t\t\t\t\torgW = opts.items[opts.d['width']];\n\t\t\t\t\thiddenitems.each(function() {\n\t\t\t\t\t\tvar hi = $(this);\n\t\t\t\t\t\thi.data('isHidden', hi.is(':hidden')).hide();\n\t\t\t\t\t});\n\t\t\t\t\topts.items[opts.d['width']] = 'variable';\n\t\t\t\t} else {\n\t\t\t\t\tvar hiddenitems = false;\n\t\t\t\t}\n\n\t\t\t\t//\tsave new sizes\n\t\t\t\tvar i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),\n\t\t\t\t\tw_siz = cf_mapWrapperSizes(ms_getSizes(c_new, opts, true), opts, !opts.usePadding);\n\n\t\t\t\tif (hiddenitems) opts.items[opts.d['width']] = orgW;\n\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\tsz_resetMargin(a_itm, opts, true);\n\t\t\t\t\tif (pR >= 0) {\n\t\t\t\t\t\tsz_resetMargin(l_old, opts, opts.padding[opts.d[1]]);\n\t\t\t\t\t}\n\t\t\t\t\tsz_resetMargin(l_cur, opts, opts.padding[opts.d[3]]);\n\t\t\t\t}\n\t\t\t\tif (opts.align) {\n\t\t\t\t\topts.padding[opts.d[1]] = pR;\n\t\t\t\t\topts.padding[opts.d[3]] = pL;\n\t\t\t\t}\n\n\t\t\t\t//\tanimation configuration\n\t\t\t\tvar a_cfs = {},\n\t\t\t\t\ta_dur = sO.duration;\n\n\t\t\t\t\t if (sO.fx == 'none')\ta_dur = 0;\n\t\t\t\telse if (a_dur == 'auto')\ta_dur = opts.scroll.duration / opts.scroll.items * nI;\n\t\t\t\telse if (a_dur <= 0)\t\ta_dur = 0;\n\t\t\t\telse if (a_dur < 10)\t\ta_dur = i_siz / a_dur;\n\n\t\t\t\tscrl = sc_setScroll(a_dur, sO.easing);\n\n\t\t\t\t//\tanimate wrapper\n\t\t\t\tif (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') {\n\t\t\t\t\tscrl.anims.push([$wrp, w_siz]);\n\t\t\t\t}\n\n\t\t\t\t//\tanimate items\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\tvar new_m = opts.padding[opts.d[3]];\n\n\t\t\t\t\tif (l_new.not(l_cur).length) {\n\t\t\t \t\t\tvar a_cur = {};\n\t\t\t \t\t\t\ta_cur[opts.d['marginRight']] = l_cur.data('cfs_origCssMargin');\n\n\t\t\t\t\t\tif (pL < 0) l_cur.css(a_cur);\n\t\t\t\t\t\telse \t\tscrl.anims.push([l_cur, a_cur]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (l_new.not(l_old).length) {\n\t\t\t\t\t\tvar a_old = {};\n\t\t\t\t\t\t\ta_old[opts.d['marginRight']] = l_old.data('cfs_origCssMargin');\n\t\t\t\t\t\tscrl.anims.push([l_old, a_old]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (pR >= 0) {\n\t\t\t\t\t\tvar a_new = {};\n\t\t\t\t\t\t\ta_new[opts.d['marginRight']] = l_new.data('cfs_origCssMargin') + opts.padding[opts.d[1]];\n\t\t\t\t\t\tscrl.anims.push([l_new, a_new]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar new_m = 0;\n\t\t\t\t}\n\n\t\t\t\t//\tanimate carousel\n\t\t\t\ta_cfs[opts.d['left']] = new_m;\n\n\t\t\t\t//\tonBefore callback\n\t\t\t\tvar args = [c_old, c_new, w_siz, a_dur];\n\t\t\t\tif (sO.onBefore) sO.onBefore.apply($tt0, args);\n\t\t\t\tclbk.onBefore = sc_callCallbacks(clbk.onBefore, $tt0, args);\n\n\n\n\t\t\t\t//\tALTERNATIVE EFFECTS\n\n\t\t\t\t//\textra animation arrays\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'fade':\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tscrl.pre = sc_setScroll(scrl.duration, scrl.easing);\n\t\t\t\t\t\tscrl.post = sc_setScroll(scrl.duration, scrl.easing);\n\t\t\t\t\t\tscrl.duration = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\tcreate copy\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tvar $cf2 = $cfs.clone().appendTo($wrp);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\t$cf2.children().slice(0, nI).remove();\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\t\t$cf2.children().slice(opts.items.visible).remove();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\tanimations\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'opacity': 0 }]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\t\t$cf2.css({ 'opacity': 0 });\n\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'width': '+=0' }, function() { $cf2.remove(); }]);\n\t\t\t\t\t\tscrl.post.anims.push([$cf2, { 'opacity': 1 }]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\t\tscrl = fx_cover(scrl, $cfs, $cf2, opts, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tscrl = fx_uncover(scrl, $cfs, $cf2, opts, true, nI);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\t/ALTERNATIVE EFFECTS\n\n\n\t\t\t\t//\tcomplete callback\n\t\t\t\tvar a_complete = function() {\n\n\t\t\t\t\tvar overFill = opts.items.visible+nI-itms.total;\n\t\t\t\t\tif (overFill > 0) {\n\t\t\t\t\t\t$cfs.children().slice(itms.total).remove();\n\t\t\t\t\t\tc_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) );\n\t\t\t\t\t}\n\t\t\t\t\tif (hiddenitems) {\n\t\t\t\t\t\thiddenitems.each(function() {\n\t\t\t\t\t\t\tvar hi = $(this);\n\t\t\t\t\t\t\tif (!hi.data('isHidden')) hi.show();\n\t\t\t\t\t\t});\t\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\t\tvar l_itm = $cfs.children().eq(opts.items.visible+nI-1);\n\t\t\t\t\t\tl_itm.css(opts.d['marginRight'], l_itm.data('cfs_origCssMargin'));\n\t\t\t\t\t}\n\n\t\t\t\t\tscrl.anims = [];\n\t\t\t\t\tif (scrl.pre) scrl.pre = sc_setScroll(scrl.orgDuration, scrl.easing);\n\n\t\t\t\t\tvar fn = function() {\n\t\t\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\t\t\t\t$cfs.css('filter', '');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscrl.post = sc_setScroll(0, null);\n\t\t\t\t\t\tcrsl.isScrolling = false;\n\n\t\t\t\t\t\tvar args = [c_old, c_new, w_siz];\n\t\t\t\t\t\tif (sO.onAfter) sO.onAfter.apply($tt0, args);\n\t\t\t\t\t\tclbk.onAfter = sc_callCallbacks(clbk.onAfter, $tt0, args);\n\n\t\t\t\t\t\tif (queu.length) {\n\t\t\t\t\t\t\t$cfs.trigger(cf_e(queu[0][0], conf), queu[0][1]);\n\t\t\t\t\t\t\tqueu.shift();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!crsl.isPaused) $cfs.trigger(cf_e('play', conf));\n\t\t\t\t\t};\n\t\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'opacity': 1 }, fn]);\n\t\t\t\t\t\t\tsc_startScroll(scrl.pre);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'width': '+=0' }, fn]);\n\t\t\t\t\t\t\tsc_startScroll(scrl.pre);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tscrl.anims.push([$cfs, a_cfs, a_complete]);\n\t\t\t\tcrsl.isScrolling = true;\n\t\t\t\t$cfs.css(opts.d['left'], -(i_siz-oL));\n\t\t\t\ttmrs = sc_clearTimers(tmrs);\n\t\t\t\tsc_startScroll(scrl);\n\t\t\t\tcf_setCookie(opts.cookie, $cfs.triggerHandler(cf_e('currentPosition', conf)));\n\n\t\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tnext event\n\t\t\t$cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar a_itm = $cfs.children();\n\n\t\t\t\t//\tnon-circular at end, scroll to start\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (itms.first == opts.items.visible) {\n\t\t\t\t\t\tif (opts.infinite) {\n\t\t\t\t\t\t\t$cfs.trigger(cf_e('prev', conf), itms.total-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn e.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts);\n\n\t\t\t\t//\tfind number of items to scroll\n\t\t\t\tif (typeof nI != 'number') {\n\t\t\t\t\tif (opts.items.filter != '*') {\n\t\t\t\t\t\tvar xI = (typeof sO.items == 'number') ? sO.items : gn_getVisibleOrg($cfs, opts);\n\t\t\t\t\t\tnI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnI = opts.items.visible;\n\t\t\t\t\t}\n\t\t\t\t\tnI = cf_getAdjust(nI, opts, sO.items, $tt0);\n\t\t\t\t}\n\n\t\t\t\tvar lastItemNr = (itms.first == 0) ? itms.total : itms.first;\n\n\t\t\t\t//\tprevent non-circular from scrolling to far\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\t\t\tvar vI = gn_getVisibleItemsNext(a_itm, opts, nI),\n\t\t\t\t\t\t\txI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar vI = opts.items.visible,\n\t\t\t\t\t\t\txI = opts.items.visible;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nI + vI > lastItemNr) {\n\t\t\t\t\t\tnI = lastItemNr - xI;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//\tset new number of visible items\n\t\t\t\topts.items.visibleConf.old = opts.items.visible;\n\t\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\t\tvar vI = gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr);\n\t\t\t\t\twhile (opts.items.visible-nI >= vI && nI < itms.total) {\n\t\t\t\t\t\tnI++;\n\t\t\t\t\t\tvI = gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr);\n\t\t\t\t\t}\n\t\t\t\t\topts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\t\t} else if (opts.items.filter != '*') {\n\t\t\t\t\tvar vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI);\n\t\t\t\t\topts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\t\t}\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts, true);\n\n\t\t\t\t//\tscroll 0, don't scroll\n\t\t\t\tif (nI == 0) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn debug(conf, '0 items to scroll: Not scrolling.');\n\t\t\t\t}\n\t\t\t\tdebug(conf, 'Scrolling '+nI+' items forward.');\n\n\t\t\t\t//\tsave new config\n\t\t\t\titms.first -= nI;\n\t\t\t\twhile (itms.first < 0) {\n\t\t\t\t\titms.first += itms.total;\n\t\t\t\t}\n\n\t\t\t\t//\tnon-circular callback\n\t\t\t\tif (!opts.circular) {\n\t\t\t\t\tif (itms.first == opts.items.visible && sO.onEnd) sO.onEnd.call($tt0);\n\t\t\t\t\tif (!opts.infinite) nv_enableNavi(opts, itms.first, conf);\n\t\t\t\t}\n\n\t\t\t\t//\trearrange items\n\t\t\t\tif (itms.total < opts.items.visible+nI) {\n\t\t\t\t\t$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);\n\t\t\t\t}\n\n\t\t\t\t//\tthe needed items\n\t\t\t\tvar a_itm = $cfs.children(),\n\t\t\t\t\tc_old = gi_getOldItemsNext(a_itm, opts),\n\t\t\t\t\tc_new = gi_getNewItemsNext(a_itm, opts, nI),\n\t\t\t\t\tl_cur = a_itm.eq(nI-1),\n\t\t\t\t\tl_old = c_old.last(),\n\t\t\t\t\tl_new = c_new.last();\n\n\t\t\t\tif (opts.usePadding) sz_resetMargin(a_itm, opts);\n\t\t\t\tif (opts.align)\t{\n\t\t\t\t\tvar p = cf_getAlignPadding(c_new, opts),\n\t\t\t\t\t\tpL = p[0],\n\t\t\t\t\t\tpR = p[1];\n\t\t\t\t} else {\n\t\t\t\t\tvar pL = 0,\n\t\t\t\t\t\tpR = 0;\n\t\t\t\t}\n\n\t\t\t\t//\thide items for fx directscroll\n\t\t\t\tif (sO.fx == 'directscroll' && opts.items.visibleConf.old < nI) {\n\t\t\t\t\tvar hiddenitems = a_itm.slice(opts.items.visibleConf.old, nI),\n\t\t\t\t\t\torgW = opts.items[opts.d['width']];\n\t\t\t\t\thiddenitems.each(function() {\n\t\t\t\t\t\tvar hi = $(this);\n\t\t\t\t\t\thi.data('isHidden', hi.is(':hidden')).hide();\n\t\t\t\t\t});\n\t\t\t\t\topts.items[opts.d['width']] = 'variable';\n\t\t\t\t} else {\n\t\t\t\t\tvar hiddenitems = false;\n\t\t\t\t}\n\n\t\t\t\t//\tsave new sizes\n\t\t\t\tvar i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),\n\t\t\t\t\tw_siz = cf_mapWrapperSizes(ms_getSizes(c_new, opts, true), opts, !opts.usePadding);\n\n\t\t\t\tif (hiddenitems) opts.items[opts.d['width']] = orgW;\n\n\t\t\t\tif (opts.align) {\n\t\t\t\t\tif (opts.padding[opts.d[1]] < 0) {\n\t\t\t\t\t\topts.padding[opts.d[1]] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\tsz_resetMargin(a_itm, opts, true);\n\t\t\t\t\tsz_resetMargin(l_old, opts, opts.padding[opts.d[1]]);\n\t\t\t\t}\n\t\t\t\tif (opts.align) {\n\t\t\t\t\topts.padding[opts.d[1]] = pR;\n\t\t\t\t\topts.padding[opts.d[3]] = pL;\n\t\t\t\t}\n\n\t\t\t\t//\tanimation configuration\n\t\t\t\tvar a_cfs = {},\n\t\t\t\t\ta_dur = sO.duration;\n\n\t\t\t\t\t if (sO.fx == 'none')\ta_dur = 0;\n\t\t\t\telse if (a_dur == 'auto')\ta_dur = opts.scroll.duration / opts.scroll.items * nI;\n\t\t\t\telse if (a_dur <= 0)\t\ta_dur = 0;\n\t\t\t\telse if (a_dur < 10)\t\ta_dur = i_siz / a_dur;\n\n\t\t\t\tscrl = sc_setScroll(a_dur, sO.easing);\n\n\t\t\t\t//\tanimate wrapper\n\t\t\t\tif (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable') {\n\t\t\t\t\tscrl.anims.push([$wrp, w_siz]);\n\t\t\t\t}\n\n\t\t\t\t//\tanimate items\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\tvar l_new_m = l_new.data('cfs_origCssMargin');\n\t\t\t\t\tif (pR >= 0) {\n\t\t\t\t\t\tl_new_m += opts.padding[opts.d[1]];\n\t\t\t\t\t}\n\t\t\t\t\tl_new.css(opts.d['marginRight'], l_new_m);\n\n\t\t\t\t\tif (l_cur.not(l_old).length) {\n\t\t\t\t\t\tvar a_old = {};\n\t\t\t\t\t\t\ta_old[opts.d['marginRight']] = l_old.data('cfs_origCssMargin');\n\t\t\t\t\t\tscrl.anims.push([l_old, a_old]);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar c_new_m = l_cur.data('cfs_origCssMargin');\n\t\t\t\t\tif (pL >= 0) {\n\t\t\t\t\t\tc_new_m += opts.padding[opts.d[3]];\n\t\t\t\t\t}\n\t\t\t\t\tvar a_cur = {};\n\t\t\t\t\t\ta_cur[opts.d['marginRight']] = c_new_m;\n\t\t\t\t\tscrl.anims.push([l_cur, a_cur]);\n\n\t\t\t\t}\n\n\t\t\t\t//\tanimate carousel\n\t\t\t\ta_cfs[opts.d['left']] = -i_siz;\n\t\t\t\tif (pL < 0) {\n\t\t\t\t\ta_cfs[opts.d['left']] += pL;\n\t\t\t\t}\n\n\t\t\t\t//\tonBefore callback\n\t\t\t\tvar args = [c_old, c_new, w_siz, a_dur];\n\t\t\t\tif (sO.onBefore) sO.onBefore.apply($tt0, args);\n\t\t\t\tclbk.onBefore = sc_callCallbacks(clbk.onBefore, $tt0, args);\n\n\n\n\t\t\t\t//\tALTERNATIVE EFFECTS\n\n\t\t\t\t//\textra animation arrays\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'fade':\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tscrl.pre = sc_setScroll(scrl.duration, scrl.easing);\n\t\t\t\t\t\tscrl.post = sc_setScroll(scrl.duration, scrl.easing);\n\t\t\t\t\t\tscrl.duration = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\tcreate copy\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tvar $cf2 = $cfs.clone().appendTo($wrp);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\t$cf2.children().slice(opts.items.visibleConf.old).remove();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\t\t$cf2.children().slice(0, nI).remove();\n\t\t\t\t\t\t$cf2.children().slice(opts.items.visible).remove();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\tanimations\n\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'opacity': 0 }]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\t\t$cf2.css({ 'opacity': 0 });\n\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'width': '+=0' }, function() { $cf2.remove(); }]);\n\t\t\t\t\t\tscrl.post.anims.push([$cf2, { 'opacity': 1 }]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cover':\n\t\t\t\t\t\tscrl = fx_cover(scrl, $cfs, $cf2, opts, false);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\tscrl = fx_uncover(scrl, $cfs, $cf2, opts, false, nI);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//\t/ALTERNATIVE EFFECTS\n\n\n\t\t\t\t//\tcomplete callback\n\t\t\t\tvar a_complete = function() {\n\n\t\t\t\t\tvar overFill = opts.items.visible+nI-itms.total,\n\t\t\t\t\t\tnew_m = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;\n\t\t\t\t\t$cfs.css(opts.d['left'], new_m);\n\t\t\t\t\tif (overFill > 0) {\n\t\t\t\t\t\t$cfs.children().slice(itms.total).remove();\n\t\t\t\t\t}\n\t\t\t\t\tvar l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last();\n\t\t\t\t\tif (overFill > 0) {\n\t\t\t\t\t\tc_new = gi_getCurrentItems(a_itm, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif (hiddenitems) {\n\t\t\t\t\t\thiddenitems.each(function() {\n\t\t\t\t\t\t\tvar hi = $(this);\n\t\t\t\t\t\t\tif (!hi.data('isHidden')) hi.show();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\t\tif (itms.total < opts.items.visible+nI) {\n\t\t\t\t\t\t\tvar l_cur = $cfs.children().eq(opts.items.visible-1);\n\t\t\t\t\t\t\tl_cur.css(opts.d['marginRight'], l_cur.data('cfs_origCssMargin') + opts.padding[opts.d[3]]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl_itm.css(opts.d['marginRight'], l_itm.data('cfs_origCssMargin'));\n\t\t\t\t\t}\n\n\t\t\t\t\tscrl.anims = [];\n\t\t\t\t\tif (scrl.pre) scrl.pre = sc_setScroll(scrl.orgDuration, scrl.easing);\n\n\t\t\t\t\tvar fn = function() {\n\t\t\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\t\tcase 'crossfade':\n\t\t\t\t\t\t\t\t$cfs.css('filter', '');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscrl.post = sc_setScroll(0, null);\n\t\t\t\t\t\tcrsl.isScrolling = false;\n\n\t\t\t\t\t\tvar args = [c_old, c_new, w_siz];\n\t\t\t\t\t\tif (sO.onAfter) sO.onAfter.apply($tt0, args);\n\t\t\t\t\t\tclbk.onAfter = sc_callCallbacks(clbk.onAfter, $tt0, args);\n\n\t\t\t\t\t\tif (queu.length) {\n\t\t\t\t\t\t\t$cfs.trigger(cf_e(queu[0][0], conf), queu[0][1]);\n\t\t\t\t\t\t\tqueu.shift();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!crsl.isPaused) $cfs.trigger(cf_e('play', conf));\n\t\t\t\t\t};\n\t\t\t\t\tswitch(sO.fx) {\n\t\t\t\t\t\tcase 'fade':\n\t\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'opacity': 1 }, fn]);\n\t\t\t\t\t\t\tsc_startScroll(scrl.pre);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'uncover':\n\t\t\t\t\t\t\tscrl.pre.anims.push([$cfs, { 'width': '+=0' }, fn]);\n\t\t\t\t\t\t\tsc_startScroll(scrl.pre);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tscrl.anims.push([$cfs, a_cfs, a_complete]);\n\t\t\t\tcrsl.isScrolling = true;\n\t\t\t\ttmrs = sc_clearTimers(tmrs);\n\t\t\t\tsc_startScroll(scrl);\n\t\t\t\tcf_setCookie(opts.cookie, $cfs.triggerHandler(cf_e('currentPosition', conf)));\n\n\t\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tslideTo event\n\t\t\t$cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) {\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tvar v = [num, dev, org, obj, dir, clb],\n\t\t\t\t\tt = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\t\t\t\t\n\t\t\t\tvar obj = a[3],\n\t\t\t\t\tdir = a[4],\n\t\t\t\t\tclb = a[5];\n\n\t\t\t\tnum = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs);\n\n\t\t\t\tif (num == 0) return;\n\t\t\t\tif (typeof obj != 'object') obj = false;\n\n\t\t\t\tif (crsl.isScrolling) {\n\t\t\t\t\tif (typeof obj != 'object' || obj.duration > 0) return false;\n\t\t\t\t}\n\n\t\t\t\tif (dir != 'prev' && dir != 'next') {\n\t\t\t\t\tif (opts.circular) {\n\t\t\t\t\t\tif (num <= itms.total / 2) \tdir = 'next';\n\t\t\t\t\t\telse \t\t\t\t\t\tdir = 'prev';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (itms.first == 0 ||\n\t\t\t\t\t\t\titms.first > num)\t\tdir = 'next';\n\t\t\t\t\t\telse\t\t\t\t\t\tdir = 'prev';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (dir == 'prev') num = itms.total-num;\n\t\t\t\t$cfs.trigger(cf_e(dir, conf), [obj, num, clb]);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tprevPage event\n\t\t\t$cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar cur = $cfs.triggerHandler(cf_e('currentPage', conf));\n\t\t\t\treturn $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]);\n\t\t\t});\n\n\t\t\t//\tnextPage event\n\t\t\t$cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar cur = $cfs.triggerHandler(cf_e('currentPage', conf));\n\t\t\t\treturn $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]);\n\t\t\t});\n\n\t\t\t//\tslideToPage event\n\t\t\t$cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (typeof pag != 'number') pag = $cfs.triggerHandler(cf_e('currentPage', conf));\n\t\t\t\tvar ipp = opts.pagination.items || opts.items.visible,\n\t\t\t\t\tmax = Math.ceil(itms.total / ipp)-1;\n\t\t\t\tif (pag < 0)\tpag = max;\n\t\t\t\tif (pag > max)\tpag = 0;\n\t\t\t\treturn $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]);\n\t\t\t});\n\n\t\t\t//\tjumpToStart event\n\t\t\t$cfs.bind(cf_e('jumpToStart', conf), function(e, s) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (s)\ts = gn_getItemIndex(s, 0, true, itms, $cfs);\n\t\t\t\telse \ts = 0;\n\n\t\t\t\ts += itms.first;\n\t\t\t\tif (s != 0) {\n\t\t\t\t\twhile (s > itms.total) s -= itms.total;\n\t\t\t\t\t$cfs.prepend($cfs.children().slice(s, itms.total));\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tsynchronise event\n\t\t\t$cfs.bind(cf_e('synchronise', conf), function(e, s) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t\t if (s) \t\t\t\ts = cf_getSynchArr(s);\n\t\t\t\telse if (opts.synchronise)\ts = opts.synchronise;\n\t\t\t\telse return debug(conf, 'No carousel to synchronise.');\n\n\t\t\t\tvar n = $cfs.triggerHandler(cf_e('currentPosition', conf)),\n\t\t\t\t\tx = true;\n\t\t\t\tfor (var j = 0, l = s.length; j < l; j++) {\n\t\t\t\t\tif (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true])) {\n\t\t\t\t\t\tx = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn x;\n\t\t\t});\n\n\t\t\t//\tqueue event\n\t\t\t$cfs.bind(cf_e('queue', conf), function(e, dir, opt) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (typeof dir == 'function') {\n\t\t\t\t\tdir.call($tt0, queu);\n\t\t\t\t} else if (is_array(dir)) {\n\t\t\t\t\tqueu = dir;\n\t\t\t\t} else if (typeof dir != 'undefined') {\n\t\t\t\t\tqueu.push([dir, opt]);\n\t\t\t\t}\n\t\t\t\treturn queu;\n\t\t\t});\n\n\t\t\t//\tinsertItem event\n\t\t\t$cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) {\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tvar v = [itm, num, org, dev],\n\t\t\t\t\tt = ['string/object', 'string/number/object', 'boolean', 'number'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\t\t\t\t\n\t\t\t\tvar itm = a[0],\n\t\t\t\t\tnum = a[1],\n\t\t\t\t\torg = a[2],\n\t\t\t\t\tdev = a[3];\n\n\t\t\t\tif (typeof itm == 'object' && \n\t\t\t\t\ttypeof itm.jquery == 'undefined')\titm = $(itm);\n\t\t\t\tif (typeof itm == 'string') \t\t\titm = $(itm);\n\t\t\t\tif (typeof itm != 'object' ||\n\t\t\t\t\ttypeof itm.jquery == 'undefined' || \n\t\t\t\t\titm.length == 0) return debug(conf, 'Not a valid object.');\n\n\t\t\t\tif (typeof num == 'undefined') num = 'end';\n\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\titm.each(function() {\n\t\t\t\t\t\tvar m = parseInt($(this).css(opts.d['marginRight']));\n\t\t\t\t\t\tif (isNaN(m)) m = 0;\n\t\t\t\t\t\t$(this).data('cfs_origCssMargin', m);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tvar orgNum = num,\n\t\t\t\t\tbefore = 'before';\n\n\t\t\t\tif (num == 'end') {\n\t\t\t\t\tif (org) {\n\t\t\t\t\t\tif (itms.first == 0) {\n\t\t\t\t\t\t\tnum = itms.total-1;\n\t\t\t\t\t\t\tbefore = 'after';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnum = itms.first;\n\t\t\t\t\t\t\titms.first += itm.length\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (num < 0) num = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnum = itms.total-1;\n\t\t\t\t\t\tbefore = 'after';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnum = gn_getItemIndex(num, dev, org, itms, $cfs);\n\t\t\t\t}\n\t\t\t\tif (orgNum != 'end' && !org) {\n\t\t\t\t\tif (num < itms.first) itms.first += itm.length;\n\t\t\t\t}\n\t\t\t\tif (itms.first >= itms.total) itms.first -= itms.total;\n\n\t\t\t\tvar $cit = $cfs.children().eq(num);\n\t\t\t\tif ($cit.length) {\n\t\t\t\t\t$cit[before](itm);\n\t\t\t\t} else {\n\t\t\t\t\t$cfs.append(itm);\n\t\t\t\t}\n\n\t\t\t\titms.total = $cfs.children().length;\n\n\t\t\t\tvar sz = $cfs.triggerHandler('updateSizes');\n\t\t\t\tnv_showNavi(opts, itms.total, conf);\n\t\t\t\tnv_enableNavi(opts, itms.first, conf);\n\t\t\t\t$cfs.trigger(cf_e('linkAnchors', conf));\n\t\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tremoveItem event\n\t\t\t$cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t\n\t\t\t\tvar v = [num, org, dev],\n\t\t\t\t\tt = ['string/number/object', 'boolean', 'number'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\t\t\t\t\n\t\t\t\tnum = a[0];\n\t\t\t\torg = a[1];\n\t\t\t\tdev = a[2];\n\n\t\t\t\tvar removed = false;\n\t\t\t\tif (num instanceof $ && num.length > 1)\n\t\t\t\t{\n\t\t\t\t\t$removed = $();\n\t\t\t\t\tnum.each(function(i, el) {\n\t\t\t\t\t\tvar $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]);\n\t\t\t\t\t\tif ($rem) $removed = $removed.add($rem);\n\t\t\t\t\t});\n\t\t\t\t\treturn $removed;\n\t\t\t\t}\n\n\t\t\t\tif (typeof num == 'undefined' || num == 'end') {\n\t\t\t\t\t$removed = $cfs.children().last();\n\t\t\t\t} else {\n\t\t\t\t\tnum = gn_getItemIndex(num, dev, org, itms, $cfs);\n\t\t\t\t\tvar $removed = $cfs.children().eq(num);\n\t\t\t\t\tif ($removed.length){\n\t\t\t\t\t\tif (num < itms.first) itms.first -= $removed.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($removed && $removed.length) {\n\t\t\t\t\t$removed.detach();\n\t\t\t\t\titms.total = $cfs.children().length;\n\t\t\t\t\tvar sz = $cfs.triggerHandler('updateSizes');\n\t\t\t\t\tnv_showNavi(opts, itms.total, conf);\n\t\t\t\t\tnv_enableNavi(opts, itms.first, conf);\n\t\t\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);\n\t\t\t\t}\t\t\t\n\n\t\t\t\treturn $removed;\n\t\t\t});\n\n\t\t\t//\tonBefore and onAfter event\n\t\t\t$cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar eType = e.type.slice(conf.events.prefix.length);\n\t\t\t\tif (is_array(fn))\t\t\t\tclbk[eType] = fn;\n\t\t\t\tif (typeof fn == 'function')\tclbk[eType].push(fn);\n\t\t\t\treturn clbk[eType];\n\t\t\t});\n\n\t\t\t//\tcurrentPosition event\n\t\t\t$cfs.bind(cf_e('currentPosition', conf), function(e, fn) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (itms.first == 0) var val = 0;\n\t\t\t\telse var val = itms.total - itms.first;\n\t\t\t\tif (typeof fn == 'function') fn.call($tt0, val);\n\t\t\t\treturn val;\n\t\t\t});\n\n\t\t\t//\tcurrentPage event\n\t\t\t$cfs.bind(cf_e('currentPage', conf), function(e, fn) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar ipp = opts.pagination.items || opts.items.visible;\n\t\t\t\tvar max = Math.ceil(itms.total/ipp-1);\n\t\t\t\tif (itms.first == 0) \t\t\t\t\t\t\tvar nr = 0;\n\t\t\t\telse if (itms.first < itms.total % ipp) \t\tvar nr = 0;\n\t\t\t\telse if (itms.first == ipp && !opts.circular) \tvar nr = max;\n\t\t\t\telse \t\t\t\t\t\t\t\t\t\t\tvar nr = Math.round((itms.total-itms.first)/ipp);\n\t\t\t\tif (nr < 0) nr = 0;\n\t\t\t\tif (nr > max) nr = max;\n\t\t\t\tif (typeof fn == 'function') fn.call($tt0, nr);\n\t\t\t\treturn nr;\n\t\t\t});\n\n\t\t\t//\tcurrentVisible event\n\t\t\t$cfs.bind(cf_e('currentVisible', conf), function(e, fn) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t$i = gi_getCurrentItems($cfs.children(), opts);\n\t\t\t\tif (typeof fn == 'function') fn.call($tt0, $i);\n\t\t\t\treturn $i;\n\t\t\t});\n\t\t\t\n\t\t\t//\tslice event\n\t\t\t$cfs.bind(cf_e('slice', conf), function(e, f, l, fn) {\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tif (itms.total == 0) return false;\n\n\t\t\t\tvar v = [f, l, fn],\n\t\t\t\t\tt = ['number', 'number', 'function'],\n\t\t\t\t\ta = cf_sortParams(v, t);\n\n\t\t\t\tf = (typeof a[0] == 'number') ? a[0] : 0;\n\t\t\t\tl = (typeof a[1] == 'number') ? a[1] : itms.total;\n\t\t\t\tfn = a[2];\n\t\t\t\t\n\t\t\t\tf += itms.first;\n\t\t\t\tl += itms.first;\n\n\t\t\t\twhile (f > itms.total) { f -= itms.total }\n\t\t\t\twhile (l > itms.total) { l -= itms.total }\n\t\t\t\twhile (f < 0) { f += itms.total }\n\t\t\t\twhile (l < 0) { l += itms.total }\n\n\t\t\t\tvar $iA = $cfs.children();\n\n\t\t\t\tif (l > f) {\n\t\t\t\t\tvar $i = $iA.slice(f, l);\t\n\t\t\t\t} else {\n\t\t\t\t\tvar $i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) );\n\t\t\t\t}\n\n\t\t\t\tif (typeof fn == 'function') fn.call($tt0, $i);\n\t\t\t\treturn $i;\n\t\t\t});\n\n\t\t\t//\tisPaused, isStopped and isScrolling events\n\t\t\t$cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar eType = e.type.slice(conf.events.prefix.length);\n\t\t\t\tif (typeof fn == 'function') fn.call($tt0, crsl[eType]);\n\t\t\t\treturn crsl[eType];\n\t\t\t});\n\n\t\t\t//\tconfiguration event\n\t\t\t$cfs.bind(cf_e('configuration', conf), function(e, a, b, c) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tvar reInit = false;\n\n\t\t\t\t//\treturn entire configuration-object\n\t\t\t\tif (typeof a == 'function') {\n\t\t\t\t\ta.call($tt0, opts);\n\n\t\t\t\t//\tset multiple options via object\n\t\t\t\t} else if (typeof a == 'object') {\n\t\t\t\t\topts_orig = $.extend(true, {}, opts_orig, a);\n\t\t\t\t\tif (b !== false) reInit = true;\n\t\t\t\t\telse opts = $.extend(true, {}, opts, a);\n\n\t\t\t\t} else if (typeof a != 'undefined') {\n\n\t\t\t\t\t//\tcallback function for specific option\n\t\t\t\t\tif (typeof b == 'function') {\n\t\t\t\t\t\tvar val = eval('opts.'+a);\n\t\t\t\t\t\tif (typeof val == 'undefined') val = '';\n\t\t\t\t\t\tb.call($tt0, val);\n\n\t\t\t\t\t//\tset individual option\n\t\t\t\t\t} else if (typeof b != 'undefined') {\n\t\t\t\t\t\tif (typeof c !== 'boolean') c = true;\n\t\t\t\t\t\teval('opts_orig.'+a+' = b');\n\t\t\t\t\t\tif (c !== false) reInit = true;\n\t\t\t\t\t\telse eval('opts.'+a+' = b');\n\n\t\t\t\t\t//\treturn value for specific option\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn eval('opts.'+a);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reInit) {\n\t\t\t\t\tsz_resetMargin($cfs.children(), opts);\n\t\t\t\t\t$cfs._cfs_init(opts_orig);\n\t\t\t\t\t$cfs._cfs_bind_buttons();\n\t\t\t\t\tvar siz = sz_setSizes($cfs, opts, false);\n\t\t\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);\n\t\t\t\t}\n\t\t\t\treturn opts;\n\t\t\t});\n\n\t\t\t//\tlinkAnchors event\n\t\t\t$cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (typeof $con == 'undefined' || $con.length == 0) $con = $('body');\n\t\t\t\telse if (typeof $con == 'string') $con = $($con);\n\t\t\t\tif (typeof $con != 'object') return debug(conf, 'Not a valid object.');\n\t\t\t\tif (typeof sel != 'string' || sel.length == 0) sel = 'a.caroufredsel';\n\t\t\t\t$con.find(sel).each(function() {\n\t\t\t\t\tvar h = this.hash || '';\n\t\t\t\t\tif (h.length > 0 && $cfs.children().index($(h)) != -1) {\n\t\t\t\t\t\t$(this).unbind('click').click(function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$cfs.trigger(cf_e('slideTo', conf), h);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tupdatePageStatus event\n\t\t\t$cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tif (!opts.pagination.container) return;\n\t\t\t\t\n\t\t\t\tif (build) {\n\t\t\t\t\tvar ipp = opts.pagination.items || opts.items.visible,\n\t\t\t\t\t\tl = Math.ceil(itms.total/ipp);\n\n\t\t\t\t\tif (opts.pagination.anchorBuilder) {\n\t\t\t\t\t\topts.pagination.container.children().remove();\n\t\t\t\t\t\topts.pagination.container.each(function() {\n\t\t\t\t\t\t\tfor (var a = 0; a < l; a++) {\n\t\t\t\t\t\t\t\tvar i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) );\n\t\t\t\t\t\t\t\t$(this).append(opts.pagination.anchorBuilder(a+1, i));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\topts.pagination.container.each(function() {\n\t\t\t\t\t\t$(this).children().unbind(opts.pagination.event).each(function(a) {\n\t\t\t\t\t\t\t$(this).bind(opts.pagination.event, function(e) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$cfs.trigger(cf_e('slideTo', conf), [a*ipp, 0, true, opts.pagination]);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\topts.pagination.container.each(function() {\n\t\t\t\t\t$(this).children().removeClass(cf_c('selected', conf)).eq($cfs.triggerHandler(cf_e('currentPage', conf))).addClass(cf_c('selected', conf));\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t//\tupdateSizes event\n\t\t\t$cfs.bind(cf_e('updateSizes', conf), function(e) {\n\t\t\t\tvar a_itm = $cfs.children(),\n\t\t\t\t\tvI = opts.items.visible;\n\n\t\t\t\t\t if (opts.items.visibleConf.variable)\tvI = gn_getVisibleItemsNext(a_itm, opts, 0);\n\t\t\t\telse if (opts.items.filter != '*') \t\t\tvI = gn_getVisibleItemsNextFilter(a_itm, opts, 0);\n\n\t\t\t\tif (!opts.circular && itms.first != 0 && vI > itms.first) {\n\t\t\t\t\tif (opts.items.visibleConf.variable) {\n\t\t\t\t\t\tvar nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first;\n\t\t\t\t\t} else if (opts.items.filter != '*') {\n\t\t\t\t\t\tvar nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnI = opts.items.visible - itms.first;\n\t\t\t\t\t}\n\t\t\t\t\tdebug(conf, 'Preventing non-circular: sliding '+nI+' items backward.');\n\t\t\t\t\t$cfs.trigger('prev', nI);\n\t\t\t\t}\n\t\t\t\topts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);\n\t\t\t\treturn sz_setSizes($cfs, opts);\n\t\t\t});\n\n\t\t\t//\tdestroy event\n\t\t\t$cfs.bind(cf_e('destroy', conf), function(e, orgOrder) {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttmrs = sc_clearTimers(tmrs);\n\n\t\t\t\t$cfs.data('cfs_isCarousel', false);\n\t\t\t\t$cfs.trigger(cf_e('finish', conf));\n\t\t\t\tif (orgOrder) {\n\t\t\t\t\t$cfs.trigger(cf_e('jumpToStart', conf));\n\t\t\t\t}\n\t\t\t\tif (opts.usePadding) {\n\t\t\t\t\tsz_resetMargin($cfs.children(), opts);\n\t\t\t\t}\n\n\t\t\t\t$cfs.css($cfs.data('cfs_origCss'));\n\t\t\t\t$cfs._cfs_unbind_events();\n\t\t\t\t$cfs._cfs_unbind_buttons();\n\t\t\t\t$wrp.replaceWith($cfs);\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t\t\n\t\t\t//\ttriggerEvent, making prefixed and namespaced events accessible from the outside\n\t\t\t$cfs.bind('_cfs_triggerEvent', function(e, n, o) {\n\t\t\t\te.stopPropagation();\n\t\t\t\treturn $cfs.triggerHandler(cf_e(n, conf), o);\n\t\t\t});\n\t\t};\t//\t/bind_events\n\n\t\t$cfs._cfs_unbind_events = function() {\n\t\t\t$cfs.unbind(cf_e('', conf));\n\t\t\t$cfs.unbind(cf_e('', conf, false));\n\t\t};\t//\t/unbind_events\n\n\t\t$cfs._cfs_bind_buttons = function() {\n\t\t\t$cfs._cfs_unbind_buttons();\n\t\t\tnv_showNavi(opts, itms.total, conf);\n\t\t\tnv_enableNavi(opts, itms.first, conf);\n\n\t\t\tif (opts.auto.pauseOnHover) {\n\t\t\t\tvar pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover);\n\t\t\t\t$wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC);\t})\n\t\t\t\t\t.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf));\t\t});\n\t\t\t}\n\n\t\t\tif (opts.auto.button) {\n\t\t\t\topts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar ev = false,\n\t\t\t\t\t\tpC = null;\n\n\t\t\t\t\tif (crsl.isPaused) {\n\t\t\t\t\t\tev = 'play';\n\t\t\t\t\t} else if (opts.auto.pauseOnEvent) {\n\t\t\t\t\t\tev = 'pause';\n\t\t\t\t\t\tpC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent);\n\t\t\t\t\t}\n\t\t\t\t\tif (ev) {\n\t\t\t\t\t\t$cfs.trigger(cf_e(ev, conf), pC);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (opts.prev.button) {\n\t\t\t\topts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$cfs.trigger(cf_e('prev', conf));\n\t\t\t\t});\n\t\t\t\tif (opts.prev.pauseOnHover) {\n\t\t\t\t\tvar pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover);\n\t\t\t\t\topts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC);\t})\n\t\t\t\t\t\t\t\t\t.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf));\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (opts.next.button) {\n\t\t\t\topts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$cfs.trigger(cf_e('next', conf));\n\t\t\t\t});\n\t\t\t\tif (opts.next.pauseOnHover) {\n\t\t\t\t\tvar pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover);\n\t\t\t\t\topts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); \t})\n\t\t\t\t\t\t\t\t\t.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf));\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($.fn.mousewheel) {\n\t\t\t\tif (opts.prev.mousewheel) {\n\t\t\t\t\tif (!crsl.mousewheelPrev) {\n\t\t\t\t\t\tcrsl.mousewheelPrev = true;\n\t\t\t\t\t\t$wrp.mousewheel(function(e, delta) { \n\t\t\t\t\t\t\tif (delta > 0) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tvar num = bt_mousesheelNumber(opts.prev.mousewheel);\n\t\t\t\t\t\t\t\t$cfs.trigger(cf_e('prev', conf), num);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.next.mousewheel) {\n\t\t\t\t\tif (!crsl.mousewheelNext) {\n\t\t\t\t\t\tcrsl.mousewheelNext = true;\n\t\t\t\t\t\t$wrp.mousewheel(function(e, delta) { \n\t\t\t\t\t\t\tif (delta < 0) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tvar num = bt_mousesheelNumber(opts.next.mousewheel);\n\t\t\t\t\t\t\t\t$cfs.trigger(cf_e('next', conf), num);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($.fn.touchwipe) {\n\t\t\t\tvar wP = (opts.prev.wipe) ? function() { $cfs.trigger(cf_e('prev', conf)) } : null,\n\t\t\t\t\twN = (opts.next.wipe) ? function() { $cfs.trigger(cf_e('next', conf)) } : null;\n\n\t\t\t\tif (wN || wN) {\n\t\t\t\t\tif (!crsl.touchwipe) {\n\t\t\t\t\t\tcrsl.touchwipe = true;\n\t\t\t\t\t\tvar twOps = {\n\t\t\t\t\t\t\t'min_move_x': 30,\n\t\t\t\t\t\t\t'min_move_y': 30,\n\t\t\t\t\t\t\t'preventDefaultEvents': true\n\t\t\t\t\t\t};\n\t\t\t\t\t\tswitch (opts.direction) {\n\t\t\t\t\t\t\tcase 'up':\n\t\t\t\t\t\t\tcase 'down':\n\t\t\t\t\t\t\t\ttwOps.wipeUp = wP;\n\t\t\t\t\t\t\t\ttwOps.wipeDown = wN;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\ttwOps.wipeLeft = wN;\n\t\t\t\t\t\t\t\ttwOps.wipeRight = wP;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$wrp.touchwipe(twOps);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (opts.pagination.container) {\n\t\t\t\tif (opts.pagination.pauseOnHover) {\n\t\t\t\t\tvar pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);\n\t\t\t\t\topts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC);\t})\n\t\t\t\t\t\t\t\t\t\t\t .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf));\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (opts.prev.key || opts.next.key) {\n\t\t\t\t$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {\n\t\t\t\t\tvar k = e.keyCode;\n\t\t\t\t\tif (k == opts.next.key)\t{\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t$cfs.trigger(cf_e('next', conf));\n\t\t\t\t\t}\n\t\t\t\t\tif (k == opts.prev.key) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t$cfs.trigger(cf_e('prev', conf));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (opts.pagination.keys) {\n\t\t\t\t$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {\n\t\t\t\t\tvar k = e.keyCode;\n\t\t\t\t\tif (k >= 49 && k < 58) {\n\t\t\t\t\t\tk = (k-49) * opts.items.visible;\n\t\t\t\t\t\tif (k <= itms.total) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (opts.auto.play) {\n\t\t\t\t$cfs.trigger(cf_e('play', conf), opts.auto.delay);\n\t\t\t}\n\nif (crsl.upDateOnWindowResize) {\n\tvar $w = $(window),\n\t\t_windowWidth = $w.width(),\n\t\t_windowHeight = $w.height();\n\n\t$w.bind(cf_e('resize', conf, false, true, true), function(e) {\n\t\tif ($w.width() != _windowWidth || $w.height() != _windowHeight) {\n\t\t\t$cfs.trigger(cf_e('finish', conf));\n\t\t\tif (opts.auto.pauseOnResize && !crsl.isPaused) {\n\t\t\t\t$cfs.trigger(cf_e('play', conf));\n\t\t\t}\n\t\t\tsz_resetMargin($cfs.children(), opts);\n\t\t\t$cfs._cfs_init(opts_orig);\n\t\t\tvar siz = sz_setSizes($cfs, opts, false);\n\t\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);\n\t\n\t\t\t_windowWidth = $w.width();\n\t\t\t_windowHeight = $w.height();\n\t\t}\n\t});\n}\n\n\t\t};\t//\t/bind_buttons\n\n\t\t$cfs._cfs_unbind_buttons = function() {\n\t\t\tvar ns1 = cf_e('', conf),\n\t\t\t\tns2 = cf_e('', conf, false);\n\t\t\t\tns3 = cf_e('', conf, false, true, true);\n\n\t\t\t$(document).unbind(ns3);\n\t\t\t$(window).unbind(ns3);\n\t\t\t$wrp.unbind(ns2);\n\n\t\t\tif (opts.auto.button) opts.auto.button.unbind(ns2);\n\t\t\tif (opts.prev.button) opts.prev.button.unbind(ns2);\n\t\t\tif (opts.next.button) opts.next.button.unbind(ns2);\n\t\t\tif (opts.pagination.container) {\n\t\t\t\topts.pagination.container.unbind(ns2);\n\t\t\t\tif (opts.pagination.anchorBuilder) {\n\t\t\t\t\topts.pagination.container.children().remove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnv_showNavi(opts, 'hide', conf);\n\t\t\tnv_enableNavi(opts, 'removeClass', conf);\n\n\t\t};\t//\t/unbind_buttons\n\n\n\n\t\t//\tSTART\n\n\t\tvar crsl = {\n\t\t\t\t'direction'\t\t: 'next',\n\t\t\t\t'isPaused'\t\t: true,\n\t\t\t\t'isScrolling'\t: false,\n\t\t\t\t'isStopped'\t\t: false,\n\n\t\t\t\t'mousewheelNext': false,\n\t\t\t\t'mousewheelPrev': false,\n\t\t\t\t'touchwipe'\t\t: false\n\t\t\t},\n\t\t\titms = {\n\t\t\t\t'total'\t\t\t: $cfs.children().length,\n\t\t\t\t'first'\t\t\t: 0\n\t\t\t},\n\t\t\ttmrs = {\n\t\t\t\t'timer'\t\t\t: null,\n\t\t\t\t'auto'\t\t\t: null,\n\t\t\t\t'queue'\t\t\t: null,\n\t\t\t\t'startTime'\t\t: getTime(),\n\t\t\t\t'timePassed'\t: 0\n\t\t\t},\n\t\t\tscrl = {\n\t\t\t\t'isStopped'\t\t: false,\n\t\t\t\t'duration'\t\t: 0,\n\t\t\t\t'startTime'\t\t: 0,\n\t\t\t\t'easing'\t\t: '',\n\t\t\t\t'anims'\t\t\t: []\n\t\t\t},\n\t\t\tclbk = {\n\t\t\t\t'onBefore'\t\t: [],\n\t\t\t\t'onAfter'\t\t: []\n\t\t\t},\n\t\t\tqueu = [],\n\t\t\tconf = $.extend(true, {}, $.fn.carouFredSel.configs, configs),\n\t\t\topts = {},\n\t\t\topts_orig = options,\n\t\t\t$wrp = $cfs.wrap('<'+conf.wrapper.element+' class=\"'+conf.wrapper.classname+'\" />').parent();\n\n\t\tconf.selector\t\t= $cfs.selector;\n\t\tconf.serialNumber\t= $.fn.carouFredSel.serialNumber++;\n\n\t\t//\tcreate carousel\n\t\t$cfs._cfs_init(opts_orig, true, starting_position);\n\t\t$cfs._cfs_build();\n\t\t$cfs._cfs_bind_events();\n\t\t$cfs._cfs_bind_buttons();\n\n\t\t//\tfind item to start\n\t\tif (is_array(opts.items.start)) {\n\t\t\tvar start_arr = opts.items.start;\n\t\t} else {\n\t\t\tvar start_arr = [];\n\t\t\tif (opts.items.start != 0) {\n\t\t\t\tstart_arr.push(opts.items.start);\n\t\t\t}\n\t\t}\n\t\tif (opts.cookie) {\n\t\t\tstart_arr.unshift(cf_readCookie(opts.cookie));\n\t\t}\n\t\tif (start_arr.length > 0) {\n\t\t\tfor (var a = 0, l = start_arr.length; a < l; a++) {\n\t\t\t\tvar s = start_arr[a];\n\t\t\t\tif (s == 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (s === true) {\n\t\t\t\t\ts = window.location.hash;\n\t\t\t\t\tif (s.length < 1) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (s === 'random') {\n\t\t\t\t\ts = Math.floor(Math.random()*itms.total);\n\t\t\t\t}\n\t\t\t\tif ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }])) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar siz = sz_setSizes($cfs, opts, false),\n\t\t\titm = gi_getCurrentItems($cfs.children(), opts);\n\n\t\tif (opts.onCreate) {\n\t\t\topts.onCreate.call($tt0, itm, siz);\n\t\t}\n\n\t\t$cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);\n\t\t$cfs.trigger(cf_e('linkAnchors', conf));\n\n\t\treturn $cfs;\n\t};\n\n\n\t//\tGLOBAL PUBLIC\n\n\t$.fn.carouFredSel.serialNumber = 1;\n\t$.fn.carouFredSel.defaults = {\n\t\t'synchronise'\t: false,\n\t\t'infinite'\t\t: true,\n\t\t'circular'\t\t: true,\n\t\t'responsive'\t: false,\n\t\t'direction'\t\t: 'left',\n\t\t'items'\t\t\t: {\n\t\t\t'start'\t\t\t: 0\n\t\t},\n\t\t'scroll'\t\t: {\n\t\t\t'easing'\t\t: 'swing',\n\t\t\t'duration'\t\t: 500,\n\t\t\t'pauseOnHover'\t: false,\n\t\t\t'mousewheel'\t: false,\n\t\t\t'wipe'\t\t\t: false,\n\t\t\t'event'\t\t\t: 'click',\n\t\t\t'queue'\t\t\t: false\n\t\t}\n\t};\n\t$.fn.carouFredSel.configs = {\n\t\t'debug'\t\t\t: false,\n\t\t'events'\t\t: {\n\t\t\t'prefix'\t\t: '',\n\t\t\t'namespace'\t\t: 'cfs'\n\t\t},\n\t\t'wrapper'\t\t: {\n\t\t\t'element'\t\t: 'div',\n\t\t\t'classname'\t\t: 'caroufredsel_wrapper'\n\t\t},\n\t\t'classnames'\t: {}\n\t};\n\t$.fn.carouFredSel.pageAnchorBuilder = function(nr, itm) {\n\t\treturn ''+nr+'';\n\t};\n\n\n\t//\tGLOBAL PRIVATE\n\n\t//\tscrolling functions\n\tfunction sc_setScroll(d, e) {\n\t\treturn {\n\t\t\tanims\t\t: [],\n\t\t\tduration\t: d,\n\t\t\torgDuration\t: d,\n\t\t\teasing\t\t: e,\n\t\t\tstartTime\t: getTime()\n\t\t};\n\t}\n\tfunction sc_startScroll(s) {\n\t\tif (typeof s.pre == 'object') {\n\t\t\tsc_startScroll(s.pre);\n\t\t}\n\t\tfor (var a = 0, l = s.anims.length; a < l; a++) {\n\t\t\tvar b = s.anims[a];\n\t\t\tif (!b) continue;\n\t\t\tif (b[3]) b[0].stop();\n\t\t\tb[0].animate(b[1], {\n\t\t\t\tcomplete: b[2],\n\t\t\t\tduration: s.duration,\n\t\t\t\teasing: s.easing\n\t\t\t});\n\t\t}\n\t\tif (typeof s.post == 'object') {\n\t\t\tsc_startScroll(s.post);\n\t\t}\n\t}\n\tfunction sc_stopScroll(s, finish) {\n\t\tif (typeof finish != 'boolean') finish = true;\n\t\tif (typeof s.pre == 'object') {\n\t\t\tsc_stopScroll(s.pre, finish);\n\t\t}\n\t\tfor (var a = 0, l = s.anims.length; a < l; a++) {\n\t\t\tvar b = s.anims[a];\n\t\t\tb[0].stop(true);\n\t\t\tif (finish) {\n\t\t\t\tb[0].css(b[1]);\n\t\t\t\tif (typeof b[2] == 'function') b[2]();\n\t\t\t}\n\t\t}\n\t\tif (typeof s.post == 'object') {\n\t\t\tsc_stopScroll(s.post, finish);\n\t\t}\n\t}\n\tfunction sc_clearTimers(t) {\n\t\tif (t.auto) clearTimeout(t.auto);\n\t\treturn t;\n\t}\n\tfunction sc_callCallbacks(cbs, t, args) {\n\t\tif (cbs.length) {\n\t\t\tfor (var a = 0, l = cbs.length; a < l; a++) {\n\t\t\t\tcbs[a].apply(t, args);\n\t\t\t}\n\t\t}\n\t\treturn [];\n\t}\n\n\t//\tfx functions\n\tfunction fx_fade(sO, c, x, d, f) {\n\t\tvar o = {\n\t\t\t'duration'\t: d,\n\t\t\t'easing'\t: sO.easing\n\t\t};\n\t\tif (typeof f == 'function') o.complete = f;\n\t\tc.animate({\n\t\t\topacity: x\n\t\t}, o);\n\t}\n\tfunction fx_cover(sc, c1, c2, o, prev) {\n\t\tvar old_w = ms_getSizes(gi_getOldItemsNext(c1.children(), o), o, true)[0],\n\t\t\tnew_w = ms_getSizes(c2.children(), o, true)[0],\n\t\t\tcur_l = (prev) ? -new_w : old_w,\n\t\t\tcss_o = {},\n\t\t\tani_o = {};\n\n\t\tcss_o[o.d['width']] = new_w;\n\t\tcss_o[o.d['left']] = cur_l;\n\t\tani_o[o.d['left']] = 0;\n\t\t\n\t\tsc.pre.anims.push([c1, { 'opacity': 1 }]);\n\t\tsc.post.anims.push([c2, ani_o, function() { $(this).remove(); }]);\n\t\tc2.css(css_o);\n\t\treturn sc;\n\t}\n\tfunction fx_uncover(sc, c1, c2, o, prev, n) {\n\t\tvar new_w = ms_getSizes(gi_getNewItemsNext(c1.children(), o, n), o, true)[0],\n\t\t\told_w = ms_getSizes(c2.children(), o, true)[0],\n\t\t\tcur_l = (prev) ? -old_w : new_w,\n\t\t\tcss_o = {},\n\t\t\tani_o = {};\n\n\t\tcss_o[o.d['width']] = old_w;\n\t\tcss_o[o.d['left']] = 0;\n\t\tani_o[o.d['left']] = cur_l;\n\t\tsc.post.anims.push([c2, ani_o, function() { $(this).remove(); }]);\n\t\tc2.css(css_o);\n\t\treturn sc;\n\t}\n\n\t//\tnavigation functions\n\tfunction nv_showNavi(o, t, c) {\n\t\tif (t == 'show' || t == 'hide') {\n\t\t\tvar f = t;\n\t\t} else if (o.items.minimum >= t) {\n\t\t\tdebug(c, 'Not enough items: hiding navigation ('+t+' items, '+o.items.minimum+' needed).');\n\t\t\tvar f = 'hide';\n\t\t} else {\n\t\t\tvar f = 'show';\n\t\t}\n\t\tvar s = (f == 'show') ? 'removeClass' : 'addClass',\n\t\t\th = cf_c('hidden', c);\n\t\tif (o.auto.button) o.auto.button[f]()[s](h);\n\t\tif (o.prev.button) o.prev.button[f]()[s](h);\n\t\tif (o.next.button) o.next.button[f]()[s](h);\n\t\tif (o.pagination.container) o.pagination.container[f]()[s](h);\n\t}\n\tfunction nv_enableNavi(o, f, c) {\n\t\tif (o.circular || o.infinite) return;\n\t\tvar fx = (f == 'removeClass' || f == 'addClass') ? f : false,\n\t\t\tdi = cf_c('disabled', c);\n\t\tif (o.auto.button && fx) {\n\t\t\to.auto.button[fx](di);\n\t\t}\n\t\tif (o.prev.button) {\n\t\t\tvar fn = fx || (f == 0) ? 'addClass' : 'removeClass';\n\t\t\to.prev.button[fn](di);\n\t\t}\n\t\tif (o.next.button) {\n\t\t\tvar fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass';\n\t\t\to.next.button[fn](di);\n\t\t}\n\t}\n\n\t//\tget object functions\n\tfunction go_getObject($tt, obj) {\n\t\tif (typeof obj == 'function')\tobj = obj.call($tt);\n\t\tif (typeof obj == 'undefined')\tobj = {};\n\t\treturn obj;\n\t}\n\tfunction go_getNaviObject($tt, obj, type) {\n\t\tif (typeof type != 'string') type = '';\n\n\t\tobj = go_getObject($tt, obj);\n\t\tif (typeof obj == 'string') {\n\t\t\tvar temp = cf_getKeyCode(obj);\n\t\t\tif (temp == -1) obj = $(obj);\n\t\t\telse \t\t\tobj = temp;\n\t\t}\n\n\t\t//\tpagination\n\t\tif (type == 'pagination') {\n\t\t\tif (typeof obj \t\t\t\t== 'boolean')\tobj = { 'keys': obj };\n\t\t\tif (typeof obj.jquery \t\t!= 'undefined')\tobj = { 'container': obj };\n\t\t\tif (typeof obj.container\t== 'function')\tobj.container = obj.container.call($tt);\n\t\t\tif (typeof obj.container\t== 'string')\tobj.container = $(obj.container);\n\t\t\tif (typeof obj.items\t\t!= 'number')\tobj.items = false;\n\n\t\t//\tauto\n\t\t} else if (type == 'auto') {\n\t\t\tif (typeof obj.jquery\t!= 'undefined')\t\tobj = { 'button': obj };\n\t\t\tif (typeof obj == 'boolean')\t\t\t\tobj = { 'play': obj };\n\t\t\tif (typeof obj == 'number')\t\t\t\t\tobj = { 'pauseDuration': obj };\n\t\t\tif (typeof obj.button\t\t== 'function')\tobj.button = obj.button.call($tt);\n\t\t\tif (typeof obj.button\t\t== 'string')\tobj.button = $(obj.button);\n\n\t\t//\tprev + next\n\t\t} else {\n\t\t\tif (typeof obj.jquery\t\t!= 'undefined')\tobj = { 'button': obj };\n\t\t\tif (typeof obj \t\t\t\t== 'number')\tobj = { 'key': obj };\n\t\t\tif (typeof obj.button\t\t== 'function')\tobj.button = obj.button.call($tt);\n\t\t\tif (typeof obj.button\t\t== 'string')\tobj.button = $(obj.button);\n\t\t\tif (typeof obj.key\t\t\t== 'string')\tobj.key = cf_getKeyCode(obj.key);\n\t\t}\t\t\t\n\n\t\treturn obj;\n\t}\n\n\t//\tget number functions\n\tfunction gn_getItemIndex(num, dev, org, items, $cfs) {\n\t\tif (typeof num == 'string') {\n\t\t\tif (isNaN(num)) num = $(num);\n\t\t\telse \t\t\tnum = parseInt(num);\n\t\t}\n\t\tif (typeof num == 'object') {\n\t\t\tif (typeof num.jquery == 'undefined') num = $(num);\n\t\t\tnum = $cfs.children().index(num);\n\t\t\tif (num == -1) num = 0;\n\t\t\tif (typeof org != 'boolean') org = false;\n\t\t} else {\n\t\t\tif (typeof org != 'boolean') org = true;\n\t\t}\n\t\tif (isNaN(num))\tnum = 0;\n\t\telse \t\t\tnum = parseInt(num);\n\t\tif (isNaN(dev))\tdev = 0;\n\t\telse \t\t\tdev = parseInt(dev);\n\n\t\tif (org) {\n\t\t\tnum += items.first;\n\t\t}\n\t\tnum += dev;\n\t\tif (items.total > 0) {\n\t\t\twhile (num >= items.total)\t{\tnum -= items.total; }\n\t\t\twhile (num < 0)\t\t\t\t{\tnum += items.total; }\n\t\t}\n\t\treturn num;\n\t}\n\n\t//\titems prev\n\tfunction gn_getVisibleItemsPrev(i, o, s) {\n\t\tvar t = 0,\n\t\t\tx = 0;\n\n\t\tfor (var a = s; a >= 0; a--) {\n\t\t\tvar j = i.eq(a);\n\t\t\tt += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;\n\t\t\tif (t > o.maxDimention) return x;\n\t\t\tif (a == 0) a = i.length;\n\t\t\tx++;\n\t\t}\n\t}\n\tfunction gn_getVisibleItemsPrevFilter(i, o, s) {\n\t\treturn gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s);\n\t}\n\tfunction gn_getScrollItemsPrevFilter(i, o, s, m) {\n\t\treturn gn_getItemsPrevFilter(i, o.items.filter, m, s);\n\t}\n\tfunction gn_getItemsPrevFilter(i, f, m, s) {\n\t\tvar t = 0,\n\t\t\tx = 0;\n\t\n\t\tfor (var a = s, l = i.length; a >= 0; a--) {\n\t\t\tx++;\n\t\t\tif (x == l) return x;\n\n\t\t\tvar j = i.eq(a);\n\t\t\tif (j.is(f)) {\n\t\t\t\tt++;\n\t\t\t\tif (t == m) return x;\n\t\t\t}\n\t\t\tif (a == 0) a = l;\n\t\t}\n\t}\n\n\tfunction gn_getVisibleOrg($c, o) {\n\t\treturn o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length;\n\t}\n\n\t//\titems next\n\tfunction gn_getVisibleItemsNext(i, o, s) {\n\t\tvar t = 0,\n\t\t\tx = 0;\n\n\t\tfor (var a = s, l = i.length-1; a <= l; a++) {\n\t\t\tvar j = i.eq(a);\n\n\t\t\tt += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;\n\t\t\tif (t > o.maxDimention) return x;\n\n\t\t\tx++;\n\t\t\tif (x == l+1) return x;\n\t\t\tif (a == l) a = -1;\n\t\t}\n\t}\n\tfunction gn_getVisibleItemsNextTestCircular(i, o, s, l) {\n\t\tvar v = gn_getVisibleItemsNext(i, o, s);\n\t\tif (!o.circular) {\n\t\t\tif (s + v > l) v = l - s;\n\t\t}\n\t\treturn v;\n\t}\n\tfunction gn_getVisibleItemsNextFilter(i, o, s) {\n\t\treturn gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular);\n\t}\n\tfunction gn_getScrollItemsNextFilter(i, o, s, m) {\n\t\treturn gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1;\n\t}\n\tfunction gn_getItemsNextFilter(i, f, m, s, c) {\n\t\tvar t = 0,\n\t\t\tx = 0;\n\n\t\tfor (var a = s, l = i.length-1; a <= l; a++) {\n\t\t\tx++;\n\t\t\tif (x == l) return x;\n\n\t\t\tvar j = i.eq(a);\n\t\t\tif (j.is(f)) {\n\t\t\t\tt++;\n\t\t\t\tif (t == m) return x;\n\t\t\t}\n\t\t\tif (a == l) a = -1;\n\t\t}\n\t}\n\n\t//\tget items functions\n\tfunction gi_getCurrentItems(i, o) {\n\t\treturn i.slice(0, o.items.visible);\n\t}\n\tfunction gi_getOldItemsPrev(i, o, n) {\n\t\treturn i.slice(n, o.items.visibleConf.old+n);\n\t}\n\tfunction gi_getNewItemsPrev(i, o) {\n\t\treturn i.slice(0, o.items.visible);\n\t}\n\tfunction gi_getOldItemsNext(i, o) {\n\t\treturn i.slice(0, o.items.visibleConf.old);\n\t}\n\tfunction gi_getNewItemsNext(i, o, n) {\n\t\treturn i.slice(n, o.items.visible+n);\n\t}\n\n\t//\tsizes functions\n\tfunction sz_resetMargin(i, o, m) {\n\t\tvar x = (typeof m == 'boolean') ? m : false;\n\t\tif (typeof m != 'number') m = 0;\n\t\ti.each(function() {\n\t\t\tvar j = $(this);\n\t\t\tvar t = parseInt(j.css(o.d['marginRight']));\n\t\t\tif (isNaN(t)) t = 0;\n\t\t\tj.data('cfs_tempCssMargin', t);\n\t\t\tj.css(o.d['marginRight'], ((x) ? j.data('cfs_tempCssMargin') : m + j.data('cfs_origCssMargin')));\n\t\t});\n\t}\n\tfunction sz_setSizes($c, o, p) {\n\t\tvar $w = $c.parent(),\n\t\t\t$i = $c.children(),\n\t\t\t$v = gi_getCurrentItems($i, o),\n\t\t\tsz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, p);\n\n\t\t$w.css(sz);\n\n\t\tif (o.usePadding) {\n\t\t\tvar p = o.padding,\n\t\t\t\tr = p[o.d[1]];\n\t\t\tif (o.align) {\n\t\t\t\tif (r < 0) r = 0;\n\t\t\t}\n\t\t\tvar $l = $v.last();\n\t\t\t$l.css(o.d['marginRight'], $l.data('cfs_origCssMargin') + r);\n\t\t\t$c.css(o.d['top'], p[o.d[0]]);\n\t\t\t$c.css(o.d['left'], p[o.d[3]]);\n\t\t}\n\n\t\t$c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2));\n\t\t$c.css(o.d['height'], ms_getLargestSize($i, o, 'height'));\n\t\treturn sz;\n\t}\n\n\t//\tmeasuring functions\n\tfunction ms_getSizes(i, o, wrapper) {\n\t\tvar s1 = ms_getTotalSize(i, o, 'width', wrapper),\n\t\t\ts2 = ms_getLargestSize(i, o, 'height', wrapper);\n\t\treturn [s1, s2];\n\t}\n\tfunction ms_getLargestSize(i, o, dim, wrapper) {\n\t\tif (typeof wrapper != 'boolean') wrapper = false;\n\t\tif (typeof o[o.d[dim]] == 'number' && wrapper) return o[o.d[dim]];\n\t\tif (typeof o.items[o.d[dim]] == 'number') return o.items[o.d[dim]];\n\t\tvar di2 = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight';\n\t\treturn ms_getTrueLargestSize(i, o, di2);\n\t}\n\tfunction ms_getTrueLargestSize(i, o, dim) {\n\t\tvar s = 0;\n\n\t\tfor (var a = 0, l = i.length; a < l; a++) {\n\t\t\tvar j = i.eq(a);\n\n\t\t\tvar m = (j.is(':visible')) ? j[o.d[dim]](true) : 0;\n\t\t\tif (s < m) s = m;\n\t\t}\n\t\treturn s;\n\t}\n\tfunction ms_getTrueInnerSize($el, o, dim) {\n\t\tif (!$el.is(':visible')) return 0;\n\n\t\tvar siz = $el[o.d[dim]](),\n\t\t\tarr = (o.d[dim].toLowerCase().indexOf('width') > -1) ? ['paddingLeft', 'paddingRight'] : ['paddingTop', 'paddingBottom'];\n\t\t\n\t\tfor (var a = 0, l = arr.length; a < l; a++) {\n\t\t\tvar m = parseInt($el.css(arr[a]));\n\t\t\tsiz -= (isNaN(m)) ? 0 : m;\n\t\t}\n\t\treturn siz;\n\t}\n\tfunction ms_getTotalSize(i, o, dim, wrapper) {\n\t\tif (typeof wrapper != 'boolean') wrapper = false;\n\t\tif (typeof o[o.d[dim]] == 'number' && wrapper) return o[o.d[dim]];\n\t\tif (typeof o.items[o.d[dim]] == 'number') return o.items[o.d[dim]] * i.length;\n\t\t\n\t\tvar d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight',\n\t\t\ts = 0;\n\t\t\n\t\tfor (var a = 0, l = i.length; a < l; a++) {\n\t\t\tvar j = i.eq(a);\n\t\t\ts += (j.is(':visible')) ? j[o.d[d]](true) : 0;\n\t\t}\n\t\treturn s;\n\t}\n\tfunction ms_hasVariableSizes(i, o, dim) {\n\t\tvar s = false,\n\t\t\tv = false;\n\t\t\n\t\tfor (var a = 0, l = i.length; a < l; a++) {\n\t\t\tvar j = i.eq(a);\n\n\t\t\tvar c = (j.is(':visible')) ? j[o.d[dim]](true) : 0;\n\t\t\tif (s === false) s = c;\n\t\t\telse if (s != c) v = true;\n\t\t\tif (s == 0)\t\t v = true;\n\t\t}\n\t\treturn v;\n\t}\n\tfunction ms_getPaddingBorderMargin(i, o, d) {\n\t\treturn i[o.d['outer'+d]](true) - ms_getTrueInnerSize(i, o, 'inner'+d);\n\t}\n\tfunction ms_isPercentage(x) {\n\t\treturn (typeof x == 'string' && x.slice(-1) == '%');\n\t}\n\tfunction ms_getPercentage(s, o) {\n\t\tif (ms_isPercentage(o)) {\n\t\t\to = o.slice(0, -1);\n\t\t\tif (isNaN(o)) return s;\n\t\t\ts *= o/100;\n\t\t}\n\t\treturn s;\n\t}\n\n\t//\tconfig functions\n\tfunction cf_e(n, c, pf, ns, rd) {\n\t\tif (typeof pf != 'boolean') pf = true;\n\t\tif (typeof ns != 'boolean') ns = true;\n\t\tif (typeof rd != 'boolean') rd = false;\n\t\t\n\t\tif (pf) n = c.events.prefix + n;\n\t\tif (ns) n = n +'.'+ c.events.namespace;\n\t\tif (ns && rd) n += c.serialNumber;\n\n\t\treturn n;\n\t}\n\tfunction cf_c(n, c) {\n\t\treturn (typeof c.classnames[n] == 'string') ? c.classnames[n] : n;\n\t}\n\tfunction cf_mapWrapperSizes(ws, o, p) {\n\t\tif (typeof p != 'boolean') p = true;\n\t\tvar pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0];\n\t\tvar wra = {};\n\t\t\twra[o.d['width']] = ws[0] + pad[1] + pad[3];\n\t\t\twra[o.d['height']] = ws[1] + pad[0] + pad[2];\n\n\t\treturn wra;\n\t}\n\tfunction cf_sortParams(vals, typs) {\n\t\tvar arr = [];\n\t\tfor (var a = 0, l1 = vals.length; a < l1; a++) {\n\t\t\tfor (var b = 0, l2 = typs.length; b < l2; b++) {\n\t\t\t\tif (typs[b].indexOf(typeof vals[a]) > -1 && typeof arr[b] == 'undefined') {\n\t\t\t\t\tarr[b] = vals[a];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t}\n\tfunction cf_getPadding(p) {\n\t\tif (typeof p == 'undefined') return [0, 0, 0, 0];\n\t\t\n\t\tif (typeof p == 'number') return [p, p, p, p];\n\t\telse if (typeof p == 'string') p = p.split('px').join('').split('em').join('').split(' ');\n\n\t\tif (!is_array(p)) {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tp[i] = parseInt(p[i]);\n\t\t}\n\t\tswitch (p.length) {\n\t\t\tcase 0:\treturn [0, 0, 0, 0];\n\t\t\tcase 1: return [p[0], p[0], p[0], p[0]];\n\t\t\tcase 2: return [p[0], p[1], p[0], p[1]];\n\t\t\tcase 3: return [p[0], p[1], p[2], p[1]];\n\t\t\tdefault: return [p[0], p[1], p[2], p[3]];\n\t\t}\n\t}\n\tfunction cf_getAlignPadding(itm, o) {\n\t\tvar x = (typeof o[o.d['width']] == 'number') ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0;\n\t\tswitch (o.align) {\n\t\t\tcase 'left': return [0, x];\n\t\t\tcase 'right': return [x, 0];\n\t\t\tcase 'center':\n\t\t\tdefault:\n\t\t\t\treturn [Math.ceil(x/2), Math.floor(x/2)];\n\t\t}\n\t}\n\tfunction cf_getAdjust(x, o, a, $t) {\n\t\tvar v = x;\n\t\tif (typeof a == 'function') {\n\t\t\tv = a.call($t, v);\n\n\t\t} else if (typeof a == 'string') {\n\t\t\tvar p = a.split('+'),\n\t\t\t\tm = a.split('-');\n\t\t\t\n\t\t\tif (m.length > p.length) {\n\t\t\t\tvar neg = true,\n\t\t\t\t\tsta = m[0],\n\t\t\t\t\tadj = m[1];\n\t\t\t} else {\n\t\t\t\tvar neg = false,\n\t\t\t\t\tsta = p[0],\n\t\t\t\t\tadj = p[1];\n\t\t\t}\n\n\t\t\tswitch(sta) {\n\t\t\t\tcase 'even':\n\t\t\t\t\tv = (x % 2 == 1) ? x-1 : x;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'odd':\n\t\t\t\t\tv = (x % 2 == 0) ? x-1 : x;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tv = x;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tadj = parseInt(adj);\n\t\t\tif (!isNaN(adj)) {\n\t\t\t\tif (neg) adj = -adj;\n\t\t\t\tv += adj;\n\t\t\t}\n\t\t}\n\t\tif (typeof v != 'number') v = 1;\n\t\tif (v < 1) v = 1;\n\t\treturn v;\n\t}\n\tfunction cf_getItemsAdjust(x, o, a, $t) {\n\t\treturn cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf);\n\t}\n\tfunction cf_getItemAdjustMinMax(v, i) {\n\t\tif (typeof i.min == 'number' && v < i.min) v = i.min;\n\t\tif (typeof i.max == 'number' && v > i.max) v = i.max;\n\t\tif (v < 1) v = 1;\n\t\treturn v;\n\t}\n\tfunction cf_getSynchArr(s) {\n\t\tif (!is_array(s)) \t\ts = [[s]];\n\t\tif (!is_array(s[0]))\ts = [s];\n\t\tfor (var j = 0, l = s.length; j < l; j++) {\n\t\t\tif (typeof s[j][0] == 'string')\t\ts[j][0] = $(s[j][0]);\n\t\t\tif (typeof s[j][1] != 'boolean')\ts[j][1] = true;\n\t\t\tif (typeof s[j][2] != 'boolean')\ts[j][2] = true;\n\t\t\tif (typeof s[j][3] != 'number')\t\ts[j][3] = 0;\n\t\t}\n\t\treturn s;\n\t}\n\tfunction cf_getKeyCode(k) {\n\t\tif (k == 'right')\treturn 39;\n\t\tif (k == 'left')\treturn 37;\n\t\tif (k == 'up')\t\treturn 38;\n\t\tif (k == 'down')\treturn 40;\n\t\treturn -1;\n\t}\n\tfunction cf_setCookie(n, v) {\n\t\tif (n) document.cookie = n+'='+v+'; path=/';\n\t}\n\tfunction cf_readCookie(n) {\n\t\tn += '=';\n\t\tvar ca = document.cookie.split(';');\n\t\tfor (var a = 0, l = ca.length; a < l; a++) {\n\t\t\tvar c = ca[a];\n\t\t\twhile (c.charAt(0) == ' ') {\n\t\t\t\tc = c.slice(1);\n\t\t\t}\n\t\t\tif (c.indexOf(n) == 0) {\n\t\t\t\treturn c.slice(n.length);\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\t//\tbuttons functions\n\tfunction bt_pauseOnHoverConfig(p) {\n\t\tif (p && typeof p == 'string') {\n\t\t\tvar i = (p.indexOf('immediate') > -1) ? true : false,\n\t\t\t\tr = (p.indexOf('resume') \t> -1) ? true : false;\n\t\t} else {\n\t\t\tvar i = r = false;\n\t\t}\n\t\treturn [i, r];\n\t}\n\tfunction bt_mousesheelNumber(mw) {\n\t\treturn (typeof mw == 'number') ? mw : null\n\t}\n\n\t//\thelper functions\n\tfunction is_array(a) {\n\t\treturn typeof(a) == 'object' && (a instanceof Array);\n\t}\n\n\tfunction getTime() {\n\t\treturn new Date().getTime();\n\t}\n\n\tfunction debug(d, m) {\n\t\tif (typeof d == 'object') {\n\t\t\tvar s = ' ('+d.selector+')';\n\t\t\td = d.debug;\n\t\t} else {\n\t\t\tvar s = '';\n\t\t}\n\t\tif (!d) return false;\n\t\t\n\t\tif (typeof m == 'string') m = 'carouFredSel'+s+': ' + m;\n\t\telse m = ['carouFredSel'+s+':', m];\n\n\t\tif (window.console && window.console.log) window.console.log(m);\n\t\treturn false;\n\t}\n\n\n\t//\tCAROUFREDSEL ALL LOWERCASE\n\n\t$.fn.caroufredsel = function(o, c) {\n\t\treturn this.carouFredSel(o, c);\n\t};\n\n\n\t//\tEASING FUNCTIONS\n\n\t$.extend($.easing, {\n\t\t'quadratic'\t: function(t) {\n\t\t\tvar t2 = t * t;\n\t\t\treturn t * (-t2 * t + 4 * t2 - 6 * t + 4);\n\t\t},\n\t\t'cubic'\t\t: function(t) {\n\t\t\treturn t * (4 * t * t - 9 * t + 6);\n\t\t},\n\t\t'elastic'\t: function(t) {\n\t\t\tvar t2 = t * t;\n\t\t\treturn t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15);\n\t\t}\n\t});\n\n\n})(jQuery);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n });\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n }\n\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n }\n\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n\n var id = 0;\n\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n }\n\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n\n function didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm[\"delete\"](form);\n }\n\n function disable(input) {\n input.disabled = true;\n }\n\n function enable(input) {\n input.disabled = false;\n }\n\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, function (exports, $, Popper) {\n 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var transitionDelay = $(element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n }\n };\n setTransitionEndSupport();\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert = /*#__PURE__*/function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype; // Public\n\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$1 = 'button';\n var VERSION$1 = '4.3.1';\n var DATA_KEY$1 = 'bs.button';\n var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n var DATA_API_KEY$1 = '.data-api';\n var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n var ClassName$1 = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector$1 = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event$1 = {\n CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button = /*#__PURE__*/function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype; // Public\n\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector$1.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName$1.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName$1.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$1);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$1);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY$1, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$1;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName$1.BUTTON)) {\n button = $(button).closest(Selector$1.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector$1.BUTTON)[0];\n $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$1] = Button._jQueryInterface;\n $.fn[NAME$1].Constructor = Button;\n\n $.fn[NAME$1].noConflict = function () {\n $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Button._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$2 = 'carousel';\n var VERSION$2 = '4.3.1';\n var DATA_KEY$2 = 'bs.carousel';\n var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n var DATA_API_KEY$2 = '.data-api';\n var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event$2 = {\n SLIDE: \"slide\" + EVENT_KEY$2,\n SLID: \"slid\" + EVENT_KEY$2,\n KEYDOWN: \"keydown\" + EVENT_KEY$2,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n TOUCHEND: \"touchend\" + EVENT_KEY$2,\n POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n POINTERUP: \"pointerup\" + EVENT_KEY$2,\n DRAG_START: \"dragstart\" + EVENT_KEY$2,\n LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n };\n var ClassName$2 = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item',\n POINTER_EVENT: 'pointer-event'\n };\n var Selector$2 = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n ITEM_IMG: '.carousel-item img',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel = /*#__PURE__*/function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype; // Public\n\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event$2.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY$2);\n $.removeData(this._element, DATA_KEY$2);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME$2, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event$2.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event$2.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event$2.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event$2.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName$2.POINTER_EVENT);\n } else {\n $(this._element).on(Event$2.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event$2.TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event$2.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n $(indicators).removeClass(ClassName$2.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName$2.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName$2.LEFT;\n orderClassName = ClassName$2.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName$2.RIGHT;\n orderClassName = ClassName$2.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event$2.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName$2.ACTIVE);\n $(nextElement).addClass(ClassName$2.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$2);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (_typeof(config) === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY$2, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY$2).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$2;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event$2.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$2] = Carousel._jQueryInterface;\n $.fn[NAME$2].Constructor = Carousel;\n\n $.fn[NAME$2].noConflict = function () {\n $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return Carousel._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$3 = 'collapse';\n var VERSION$3 = '4.3.1';\n var DATA_KEY$3 = 'bs.collapse';\n var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n var DATA_API_KEY$3 = '.data-api';\n var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n var Default$1 = {\n toggle: true,\n parent: ''\n };\n var DefaultType$1 = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event$3 = {\n SHOW: \"show\" + EVENT_KEY$3,\n SHOWN: \"shown\" + EVENT_KEY$3,\n HIDE: \"hide\" + EVENT_KEY$3,\n HIDDEN: \"hidden\" + EVENT_KEY$3,\n CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n };\n var ClassName$3 = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector$3 = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse = /*#__PURE__*/function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype; // Public\n\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName$3.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(ClassName$3.COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event$3.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY$3, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event$3.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event$3.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName$3.SHOW)) {\n $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$3);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$1, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY$3);\n\n var _config = _objectSpread({}, Default$1, $this.data(), _typeof(config) === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY$3, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$3;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$1;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY$3);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$3] = Collapse._jQueryInterface;\n $.fn[NAME$3].Constructor = Collapse;\n\n $.fn[NAME$3].noConflict = function () {\n $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Collapse._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$4 = 'dropdown';\n var VERSION$4 = '4.3.1';\n var DATA_KEY$4 = 'bs.dropdown';\n var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n var DATA_API_KEY$4 = '.data-api';\n var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event$4 = {\n HIDE: \"hide\" + EVENT_KEY$4,\n HIDDEN: \"hidden\" + EVENT_KEY$4,\n SHOW: \"show\" + EVENT_KEY$4,\n SHOWN: \"shown\" + EVENT_KEY$4,\n CLICK: \"click\" + EVENT_KEY$4,\n CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n };\n var ClassName$4 = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector$4 = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default$2 = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType$2 = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown = /*#__PURE__*/function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype; // Public\n\n _proto.toggle = function toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName$4.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n };\n\n _proto.show = function show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$4);\n $(this._element).off(EVENT_KEY$4);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Private\n ;\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $(this._element).on(Event$4.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(Selector$4.MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $(this._element.parentNode);\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getOffset = function _getOffset() {\n var _this2 = this;\n\n var offset = {};\n\n if (typeof this._config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n return data;\n };\n } else {\n offset.offset = this._config.offset;\n }\n\n return offset;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n } // Static\n ;\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$4);\n\n var _config = _typeof(config) === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $(this).data(DATA_KEY$4, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $(toggles[i]).data(DATA_KEY$4);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$(parent).hasClass(ClassName$4.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $(dropdownMenu).removeClass(ClassName$4.SHOW);\n $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n } // eslint-disable-next-line complexity\n ;\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n $(toggle).trigger('focus');\n }\n\n $(this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$4;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$2;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$2;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($(this), 'toggle');\n }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$4] = Dropdown._jQueryInterface;\n $.fn[NAME$4].Constructor = Dropdown;\n\n $.fn[NAME$4].noConflict = function () {\n $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Dropdown._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.3.1';\n var DATA_KEY$5 = 'bs.modal';\n var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n var DATA_API_KEY$5 = '.data-api';\n var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default$3 = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType$3 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event$5 = {\n HIDE: \"hide\" + EVENT_KEY$5,\n HIDDEN: \"hidden\" + EVENT_KEY$5,\n SHOW: \"show\" + EVENT_KEY$5,\n SHOWN: \"shown\" + EVENT_KEY$5,\n FOCUSIN: \"focusin\" + EVENT_KEY$5,\n RESIZE: \"resize\" + EVENT_KEY$5,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n };\n var ClassName$5 = {\n SCROLLABLE: 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$5 = {\n DIALOG: '.modal-dialog',\n MODAL_BODY: '.modal-body',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal = /*#__PURE__*/function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector$5.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype; // Public\n\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName$5.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event$5.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $.Event(Event$5.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event$5.FOCUSIN);\n $(this._element).removeClass(ClassName$5.SHOW);\n $(this._element).off(Event$5.CLICK_DISMISS);\n $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $(htmlElement).off(EVENT_KEY$5);\n });\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n\n $(document).off(Event$5.FOCUSIN);\n $.removeData(this._element, DATA_KEY$5);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$3, config);\n Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName$5.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event$5.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n .on(Event$5.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE$1) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event$5.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event$5.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event$5.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName$5.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event$5.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName$5.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName$5.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName$5.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName$5.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$5);\n\n var _config = _objectSpread({}, Default$3, $(this).data(), _typeof(config) === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(this).data(DATA_KEY$5, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$5;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$3;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event$5.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$5] = Modal._jQueryInterface;\n $.fn[NAME$5].Constructor = Modal;\n\n $.fn[NAME$5].noConflict = function () {\n $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n return Modal._jQueryInterface;\n };\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n };\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = allowedAttributeList.filter(function (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i, len);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$6 = 'tooltip';\n var VERSION$6 = '4.3.1';\n var DATA_KEY$6 = 'bs.tooltip';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType$4 = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object'\n };\n var AttachmentMap$1 = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default$4 = {\n animation: true,\n template: '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event$6 = {\n HIDE: \"hide\" + EVENT_KEY$6,\n HIDDEN: \"hidden\" + EVENT_KEY$6,\n SHOW: \"show\" + EVENT_KEY$6,\n SHOWN: \"shown\" + EVENT_KEY$6,\n INSERTED: \"inserted\" + EVENT_KEY$6,\n CLICK: \"click\" + EVENT_KEY$6,\n FOCUSIN: \"focusin\" + EVENT_KEY$6,\n FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n };\n var ClassName$6 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$6 = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip = /*#__PURE__*/function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype; // Public\n\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName$6.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector$6.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (_typeof(content) === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getOffset = function _getOffset() {\n var _this3 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap$1[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this4 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n return _this4.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n return _this4._enter(event);\n }).on(eventOut, _this4.config.selector, function (event) {\n return _this4._leave(event);\n });\n }\n });\n $(this.element).closest('.modal').on('hide.bs.modal', function () {\n if (_this4.element) {\n _this4.hide();\n }\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = _typeof(this.element.getAttribute('data-original-title'));\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $(this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _objectSpread({}, this.constructor.Default, dataAttributes, _typeof(config) === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName$6.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$6);\n\n var _config = _typeof(config) === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY$6, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$6;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$4;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$6;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$6;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$6;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$6;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$4;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME$6] = Tooltip._jQueryInterface;\n $.fn[NAME$6].Constructor = Tooltip;\n\n $.fn[NAME$6].noConflict = function () {\n $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Tooltip._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$7 = 'popover';\n var VERSION$7 = '4.3.1';\n var DATA_KEY$7 = 'bs.popover';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n var CLASS_PREFIX$1 = 'bs-popover';\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n var Default$5 = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: ''\n });\n\n var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName$7 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$7 = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event$7 = {\n HIDE: \"hide\" + EVENT_KEY$7,\n HIDDEN: \"hidden\" + EVENT_KEY$7,\n SHOW: \"show\" + EVENT_KEY$7,\n SHOWN: \"shown\" + EVENT_KEY$7,\n INSERTED: \"inserted\" + EVENT_KEY$7,\n CLICK: \"click\" + EVENT_KEY$7,\n FOCUSIN: \"focusin\" + EVENT_KEY$7,\n FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover = /*#__PURE__*/function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype; // Overrides\n\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector$7.CONTENT), content);\n $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$7);\n\n var _config = _typeof(config) === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY$7, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$5;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$7;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$7;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$7;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$7;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$5;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME$7] = Popover._jQueryInterface;\n $.fn[NAME$7].Constructor = Popover;\n\n $.fn[NAME$7].noConflict = function () {\n $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Popover._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$8 = 'scrollspy';\n var VERSION$8 = '4.3.1';\n var DATA_KEY$8 = 'bs.scrollspy';\n var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n var DATA_API_KEY$6 = '.data-api';\n var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n var Default$6 = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType$6 = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event$8 = {\n ACTIVATE: \"activate\" + EVENT_KEY$8,\n SCROLL: \"scroll\" + EVENT_KEY$8,\n LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n };\n var ClassName$8 = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector$8 = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy = /*#__PURE__*/function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype; // Public\n\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$8);\n $(this._scrollElement).off(EVENT_KEY$8);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$6, _typeof(config) === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME$8);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n $link.addClass(ClassName$8.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n // With both and