{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./vendor/assets/libs/bootstrap-select/bootstrap-select.js","webpack:///./node_modules/bootstrap-select/js/bootstrap-select.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","$","DISALLOWED_ATTRIBUTES","uriAttrs","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","filter","index","RegExp","length","sanitizeHtml","unsafeElements","whiteList","sanitizeFn","whitelistKeys","keys","len","elements","querySelectorAll","j","len2","el","elName","indexOf","attributeList","slice","attributes","whitelistedAttributes","concat","k","len3","removeAttribute","parentNode","removeChild","document","createElement","view","elemCtrProto","Element","objCtr","classListGetter","$elem","this","add","classes","Array","arguments","join","addClass","remove","removeClass","toggle","force","toggleClass","contains","hasClass","classListPropDesc","configurable","ex","undefined","number","__defineGetter__","window","toString","startsWith","testElement","classList","_add","DOMTokenList","_remove","forEach","_toggle","token","getSelectedOptions","select","ignoreDisabled","opt","selectedOptions","options","disabled","tagName","push","getSelectValues","multiple","String","$defineProperty","result","error","search","TypeError","string","stringLength","searchString","searchLength","position","pos","Number","start","Math","min","max","charCodeAt","HTMLSelectElement","valHooks","useDefault","_set","set","elem","data","apply","changedArguments","EventIsSupported","Event","e","stringSearch","method","normalize","stringTypes","searchSuccess","stringType","replace","normalizeToBase","toUpperCase","toInteger","parseInt","fn","triggerNative","eventName","event","dispatchEvent","bubbles","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","deburredLetters","reLatin","reComboMark","deburrLetter","map","escaper","source","testRegexp","replaceRegexp","htmlEscape","test","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","keyCodes","version","success","major","full","dropdown","Constructor","VERSION","split","err","selectId","EVENT_KEY","classNames","DISABLED","DIVIDER","SHOW","DROPUP","MENU","MENURIGHT","MENULEFT","BUTTONCLASS","POPOVERHEADER","ICONBASE","TICKICON","Selector","elementTemplates","subtext","whitespace","createTextNode","fragment","createDocumentFragment","noResults","cloneNode","className","setAttribute","text","checkMark","REGEXP_ARROW","REGEXP_TAB_OR_ESCAPE","generateOption","content","optgroup","nodeType","appendChild","innerHTML","inline","insertAdjacentHTML","useFragment","subtextElement","iconElement","textElement","textContent","icon","iconBase","childNodes","label","display","showNoResults","searchMatch","searchValue","noneResultsText","$menuInner","firstChild","Selectpicker","element","that","$element","$newElement","$button","$menu","selectpicker","main","current","isSearching","keydown","keyHistory","resetKeyHistory","setTimeout","sizeInfo","title","winPad","windowPadding","val","render","refresh","setStyle","selectAll","deselectAll","destroy","show","hide","init","Plugin","option","args","_option","shift","BootstrapVersion","console","warn","toUpdate","DEFAULTS","style","tickIcon","chain","each","$this","is","dataAttributes","dataAttr","config","extend","defaults","template","Function","noneSelectedText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","virtualScroll","sanitize","id","prop","autofocus","createDropdown","buildData","after","prependTo","children","$searchbox","find","checkDisabled","clickListener","liveSearchListener","focusedParent","setWidth","selectPosition","on","isVirtual","menuInner","emptyMenu","replaceChild","scrollTop","hasAttribute","off","validity","valid","buildList","multiselectable","inputGroup","parent","drop","searchbox","actionsbox","donebutton","setPositionData","canHighlight","type","height","dividerHeight","dropdownHeaderHeight","liHeight","posinset","createView","setSize","selected","prevActive","active","selectedIndex","liIndex","selectedData","menuInnerHeight","scroll","chunkSize","chunkCount","firstChunk","lastChunk","currentChunk","prevPositions","positionIsDifferent","previousElements","array1","array2","chunks","menuIsDifferent","ceil","round","endOfChunk","position0","position1","activeIndex","prevActiveIndex","defocusItem","visibleElements","setOptionStatus","every","marginTop","marginBottom","menuFragment","toSanitize","visibleElementsLen","elText","elementData","lastChild","sanitized","hasScrollBar","menuInnerInnerWidth","offsetWidth","totalMenuWidth","selectWidth","minWidth","actualMenuWidth","newActive","currentActive","focusItem","updateValue","noScroll","liData","noStyle","setPlaceholder","updateIndex","titleOption","selectTitleOption","titleNotAppended","selectedOption","navigation","performance","getEntriesByType","defaultSelected","insertBefore","readyState","addEventListener","displayedValue","optionSelector","mainData","optID","startIndex","selectOptions","addDivider","previousData","addOption","divider","getAttribute","cssText","inlineStyle","optionClass","optgroupClass","trim","tokens","addOptgroup","previous","next","headerIndex","lastIndex","item","selectData","mainElements","widestOptionLength","buildElement","liElement","combinedLength","widestOption","findLis","showCount","countMax","placeholderSelected","selectedCount","button","buttonInner","querySelector","titleFragment","hasContent","thisData","titleOptions","totalCount","tr8nText","filterExpand","clone","newStyle","status","buttonClass","newElement","previousElementSibling","nextElementSibling","menu","menuInnerInner","dropdownHeader","actions","firstOption","input","body","scrollBarWidth","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","outerHeight","menuStyle","getComputedStyle","menuWidth","menuPadding","vert","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","horiz","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","menuExtras","marginLeft","marginRight","overflowY","selectHeight","getSelectPosition","containerPos","$window","offset","$container","top","left","selectOffsetTop","selectOffsetBot","selectOffsetLeft","scrollLeft","selectOffsetRight","setMenuSize","isAuto","menuHeight","minHeight","_minHeight","maxHeight","menuInnerMinHeight","estimate","isDropup","divHeight","divLength","dropup","_popper","update","requestAnimationFrame","$selectClone","appendTo","btnWidth","outerWidth","$bsContainer","actualHeight","getPlacement","containerPosition","Default","isDisabled","append","detach","selectedOnly","setDisabled","setSelected","activeIndexIsSet","keepActive","$document","setFocus","checkPopperExists","state","isCreated","keyCode","preventDefault","_menu","hoverLi","parentElement","hoverData","retainActive","clickedData","clickedIndex","prevValue","prevIndex","prevOption","triggerChange","stopPropagation","$option","$optgroup","$optgroupOptions","maxOptionsGrp","maxReached","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","currentTarget","target","tabindex","originalEvent","isTrusted","q","cache","cacheArr","searchStyle","_searchStyle","normalizeSearch","cacheLen","liPrev","liSelectedIndex","changeAll","previousSelected","currentSelected","isActive","liActive","activeLi","isToggle","closest","$items","updateScroll","downOnTab","which","isArrowKey","lastIndexOf","liActiveIndex","scrollHeight","matches","cancel","clearTimeout","charAt","matchIndex","focus","before","removeData","old","keydownHandler","bootstrapKeydown","_dataApiKeydownHandler","noConflict","$selectpicker","jQuery"],"mappings":"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OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,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","file":"js/vendor/libs/bootstrap-select/bootstrap-select-d2ec94ff80020cb4d4d5.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 = \"https://optimal.seneris.com/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 689);\n","import 'bootstrap-select/js/bootstrap-select.js'\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(function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\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', 'tabindex', 'style', 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  /**\r\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\r\n   *\r\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\r\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\r\n   *\r\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\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 ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -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 (index, value) {\n      return value 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(unsafeElements, whiteList, sanitizeFn) {\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeElements);\n    }\n\n    var whitelistKeys = Object.keys(whiteList);\n\n    for (var i = 0, len = unsafeElements.length; i < len; i++) {\n      var elements = unsafeElements[i].querySelectorAll('*');\n\n      for (var j = 0, len2 = elements.length; j < len2; j++) {\n        var el = elements[j];\n        var elName = el.nodeName.toLowerCase();\n\n        if (whitelistKeys.indexOf(elName) === -1) {\n          el.parentNode.removeChild(el);\n          continue;\n        }\n\n        var attributeList = [].slice.call(el.attributes);\n        var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n        for (var k = 0, len3 = attributeList.length; k < len3; k++) {\n          var attr = attributeList[k];\n\n          if (!allowedAttribute(attr, whitelistedAttributes)) {\n            el.removeAttribute(attr.nodeName);\n          }\n        }\n      }\n    }\n  } // Polyfill for browsers with no classList support\n  // Remove in v2\n\n\n  if (!('classList' in document.createElement('_'))) {\n    (function (view) {\n      if (!('Element' in view)) return;\n\n      var classListProp = 'classList',\n          protoProp = 'prototype',\n          elemCtrProto = view.Element[protoProp],\n          objCtr = Object,\n          classListGetter = function classListGetter() {\n        var $elem = $(this);\n        return {\n          add: function add(classes) {\n            classes = Array.prototype.slice.call(arguments).join(' ');\n            return $elem.addClass(classes);\n          },\n          remove: function remove(classes) {\n            classes = Array.prototype.slice.call(arguments).join(' ');\n            return $elem.removeClass(classes);\n          },\n          toggle: function toggle(classes, force) {\n            return $elem.toggleClass(classes, force);\n          },\n          contains: function contains(classes) {\n            return $elem.hasClass(classes);\n          }\n        };\n      };\n\n      if (objCtr.defineProperty) {\n        var classListPropDesc = {\n          get: classListGetter,\n          enumerable: true,\n          configurable: true\n        };\n\n        try {\n          objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n        } catch (ex) {\n          // IE 8 doesn't support enumerable:true\n          // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n          // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n          if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n            classListPropDesc.enumerable = false;\n            objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n          }\n        }\n      } else if (objCtr[protoProp].__defineGetter__) {\n        elemCtrProto.__defineGetter__(classListProp, classListGetter);\n      }\n    })(window);\n  }\n\n  var testElement = document.createElement('_');\n  testElement.classList.add('c1', 'c2');\n\n  if (!testElement.classList.contains('c2')) {\n    var _add = DOMTokenList.prototype.add,\n        _remove = DOMTokenList.prototype.remove;\n\n    DOMTokenList.prototype.add = function () {\n      Array.prototype.forEach.call(arguments, _add.bind(this));\n    };\n\n    DOMTokenList.prototype.remove = function () {\n      Array.prototype.forEach.call(arguments, _remove.bind(this));\n    };\n  }\n\n  testElement.classList.toggle('c3', false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n  // support the second argument.\n\n  if (testElement.classList.contains('c3')) {\n    var _toggle = DOMTokenList.prototype.toggle;\n\n    DOMTokenList.prototype.toggle = function (token, force) {\n      if (1 in arguments && !this.contains(token) === !force) {\n        return force;\n      } else {\n        return _toggle.call(this, token);\n      }\n    };\n  }\n\n  testElement = null; // shallow array comparison\n\n  function isEqual(array1, array2) {\n    return array1.length === array2.length && array1.every(function (element, index) {\n      return element === array2[index];\n    });\n  }\n\n  ; // <editor-fold desc=\"Shims\">\n\n  if (!String.prototype.startsWith) {\n    (function () {\n      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\n      var defineProperty = function () {\n        // IE 8 only supports `Object.defineProperty` on DOM elements\n        try {\n          var object = {};\n          var $defineProperty = Object.defineProperty;\n          var result = $defineProperty(object, object, object) && $defineProperty;\n        } catch (error) {}\n\n        return result;\n      }();\n\n      var toString = {}.toString;\n\n      var startsWith = function startsWith(search) {\n        if (this == null) {\n          throw new TypeError();\n        }\n\n        var string = String(this);\n\n        if (search && toString.call(search) == '[object RegExp]') {\n          throw new TypeError();\n        }\n\n        var stringLength = string.length;\n        var searchString = String(search);\n        var searchLength = searchString.length;\n        var position = arguments.length > 1 ? arguments[1] : undefined; // `ToInteger`\n\n        var pos = position ? Number(position) : 0;\n\n        if (pos != pos) {\n          // better `isNaN`\n          pos = 0;\n        }\n\n        var start = Math.min(Math.max(pos, 0), stringLength); // Avoid the `indexOf` call if no match is possible\n\n        if (searchLength + start > stringLength) {\n          return false;\n        }\n\n        var index = -1;\n\n        while (++index < searchLength) {\n          if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n            return false;\n          }\n        }\n\n        return true;\n      };\n\n      if (defineProperty) {\n        defineProperty(String.prototype, 'startsWith', {\n          'value': startsWith,\n          'configurable': true,\n          'writable': true\n        });\n      } else {\n        String.prototype.startsWith = startsWith;\n      }\n    })();\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o, // object\n    k, // key\n    r // result array\n    ) {\n      // initialize object and result\n      r = []; // iterate over object keys\n\n      for (k in o) {\n        // fill result array with non-prototypical keys\n        r.hasOwnProperty.call(o, k) && r.push(k);\n      } // return result\n\n\n      return r;\n    };\n  }\n\n  if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {\n    Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {\n      get: function get() {\n        return this.querySelectorAll(':checked');\n      }\n    });\n  }\n\n  function getSelectedOptions(select, ignoreDisabled) {\n    var selectedOptions = select.selectedOptions,\n        options = [],\n        opt;\n\n    if (ignoreDisabled) {\n      for (var i = 0, len = selectedOptions.length; i < len; i++) {\n        opt = selectedOptions[i];\n\n        if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n          options.push(opt);\n        }\n      }\n\n      return options;\n    }\n\n    return selectedOptions;\n  } // much faster than $.val()\n\n\n  function getSelectValues(select, selectedOptions) {\n    var value = [],\n        options = selectedOptions || select.selectedOptions,\n        opt;\n\n    for (var i = 0, len = options.length; i < len; i++) {\n      opt = options[i];\n\n      if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n        value.push(opt.value);\n      }\n    }\n\n    if (!select.multiple) {\n      return !value.length ? null : value[0];\n    }\n\n    return value;\n  } // set data-selected on select element if the value has been programmatically selected\n  // prior to initialization of bootstrap-select\n  // * consider removing or replacing an alternative method *\n\n\n  var valHooks = {\n    useDefault: false,\n    _set: $.valHooks.select.set\n  };\n\n  $.valHooks.select.set = function (elem, value) {\n    if (value && !valHooks.useDefault) $(elem).data('selected', true);\n    return valHooks._set.apply(this, arguments);\n  };\n\n  var changedArguments = null;\n\n  var EventIsSupported = function () {\n    try {\n      new Event('change');\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }();\n\n  $.fn.triggerNative = function (eventName) {\n    var el = this[0],\n        event;\n\n    if (el.dispatchEvent) {\n      // for modern browsers & IE9+\n      if (EventIsSupported) {\n        // For modern browsers\n        event = new Event(eventName, {\n          bubbles: true\n        });\n      } else {\n        // For IE since it doesn't support Event constructor\n        event = document.createEvent('Event');\n        event.initEvent(eventName, true, false);\n      }\n\n      el.dispatchEvent(event);\n    } else if (el.fireEvent) {\n      // for IE8\n      event = document.createEventObject();\n      event.eventType = eventName;\n      el.fireEvent('on' + eventName, event);\n    } else {\n      // fall back to jQuery.trigger\n      this.trigger(eventName);\n    }\n  }; // </editor-fold>\n\n\n  function stringSearch(li, searchString, method, normalize) {\n    var stringTypes = ['display', 'subtext', 'tokens'],\n        searchSuccess = false;\n\n    for (var i = 0; i < stringTypes.length; i++) {\n      var stringType = stringTypes[i],\n          string = li[stringType];\n\n      if (string) {\n        string = string.toString(); // Strip HTML tags. This isn't perfect, but it's much faster than any other method\n\n        if (stringType === 'display') {\n          string = string.replace(/<[^>]+>/g, '');\n        }\n\n        if (normalize) string = normalizeToBase(string);\n        string = string.toUpperCase();\n\n        if (method === 'contains') {\n          searchSuccess = string.indexOf(searchString) >= 0;\n        } else {\n          searchSuccess = string.startsWith(searchString);\n        }\n\n        if (searchSuccess) break;\n      }\n    }\n\n    return searchSuccess;\n  }\n\n  function toInteger(value) {\n    return parseInt(value, 10) || 0;\n  } // Borrowed from Lodash (_.deburr)\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n\n\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',\n    '\\xc1': 'A',\n    '\\xc2': 'A',\n    '\\xc3': 'A',\n    '\\xc4': 'A',\n    '\\xc5': 'A',\n    '\\xe0': 'a',\n    '\\xe1': 'a',\n    '\\xe2': 'a',\n    '\\xe3': 'a',\n    '\\xe4': 'a',\n    '\\xe5': 'a',\n    '\\xc7': 'C',\n    '\\xe7': 'c',\n    '\\xd0': 'D',\n    '\\xf0': 'd',\n    '\\xc8': 'E',\n    '\\xc9': 'E',\n    '\\xca': 'E',\n    '\\xcb': 'E',\n    '\\xe8': 'e',\n    '\\xe9': 'e',\n    '\\xea': 'e',\n    '\\xeb': 'e',\n    '\\xcc': 'I',\n    '\\xcd': 'I',\n    '\\xce': 'I',\n    '\\xcf': 'I',\n    '\\xec': 'i',\n    '\\xed': 'i',\n    '\\xee': 'i',\n    '\\xef': 'i',\n    '\\xd1': 'N',\n    '\\xf1': 'n',\n    '\\xd2': 'O',\n    '\\xd3': 'O',\n    '\\xd4': 'O',\n    '\\xd5': 'O',\n    '\\xd6': 'O',\n    '\\xd8': 'O',\n    '\\xf2': 'o',\n    '\\xf3': 'o',\n    '\\xf4': 'o',\n    '\\xf5': 'o',\n    '\\xf6': 'o',\n    '\\xf8': 'o',\n    '\\xd9': 'U',\n    '\\xda': 'U',\n    '\\xdb': 'U',\n    '\\xdc': 'U',\n    '\\xf9': 'u',\n    '\\xfa': 'u',\n    '\\xfb': 'u',\n    '\\xfc': 'u',\n    '\\xdd': 'Y',\n    '\\xfd': 'y',\n    '\\xff': 'y',\n    '\\xc6': 'Ae',\n    '\\xe6': 'ae',\n    '\\xde': 'Th',\n    '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    \"\\u0100\": 'A',\n    \"\\u0102\": 'A',\n    \"\\u0104\": 'A',\n    \"\\u0101\": 'a',\n    \"\\u0103\": 'a',\n    \"\\u0105\": 'a',\n    \"\\u0106\": 'C',\n    \"\\u0108\": 'C',\n    \"\\u010A\": 'C',\n    \"\\u010C\": 'C',\n    \"\\u0107\": 'c',\n    \"\\u0109\": 'c',\n    \"\\u010B\": 'c',\n    \"\\u010D\": 'c',\n    \"\\u010E\": 'D',\n    \"\\u0110\": 'D',\n    \"\\u010F\": 'd',\n    \"\\u0111\": 'd',\n    \"\\u0112\": 'E',\n    \"\\u0114\": 'E',\n    \"\\u0116\": 'E',\n    \"\\u0118\": 'E',\n    \"\\u011A\": 'E',\n    \"\\u0113\": 'e',\n    \"\\u0115\": 'e',\n    \"\\u0117\": 'e',\n    \"\\u0119\": 'e',\n    \"\\u011B\": 'e',\n    \"\\u011C\": 'G',\n    \"\\u011E\": 'G',\n    \"\\u0120\": 'G',\n    \"\\u0122\": 'G',\n    \"\\u011D\": 'g',\n    \"\\u011F\": 'g',\n    \"\\u0121\": 'g',\n    \"\\u0123\": 'g',\n    \"\\u0124\": 'H',\n    \"\\u0126\": 'H',\n    \"\\u0125\": 'h',\n    \"\\u0127\": 'h',\n    \"\\u0128\": 'I',\n    \"\\u012A\": 'I',\n    \"\\u012C\": 'I',\n    \"\\u012E\": 'I',\n    \"\\u0130\": 'I',\n    \"\\u0129\": 'i',\n    \"\\u012B\": 'i',\n    \"\\u012D\": 'i',\n    \"\\u012F\": 'i',\n    \"\\u0131\": 'i',\n    \"\\u0134\": 'J',\n    \"\\u0135\": 'j',\n    \"\\u0136\": 'K',\n    \"\\u0137\": 'k',\n    \"\\u0138\": 'k',\n    \"\\u0139\": 'L',\n    \"\\u013B\": 'L',\n    \"\\u013D\": 'L',\n    \"\\u013F\": 'L',\n    \"\\u0141\": 'L',\n    \"\\u013A\": 'l',\n    \"\\u013C\": 'l',\n    \"\\u013E\": 'l',\n    \"\\u0140\": 'l',\n    \"\\u0142\": 'l',\n    \"\\u0143\": 'N',\n    \"\\u0145\": 'N',\n    \"\\u0147\": 'N',\n    \"\\u014A\": 'N',\n    \"\\u0144\": 'n',\n    \"\\u0146\": 'n',\n    \"\\u0148\": 'n',\n    \"\\u014B\": 'n',\n    \"\\u014C\": 'O',\n    \"\\u014E\": 'O',\n    \"\\u0150\": 'O',\n    \"\\u014D\": 'o',\n    \"\\u014F\": 'o',\n    \"\\u0151\": 'o',\n    \"\\u0154\": 'R',\n    \"\\u0156\": 'R',\n    \"\\u0158\": 'R',\n    \"\\u0155\": 'r',\n    \"\\u0157\": 'r',\n    \"\\u0159\": 'r',\n    \"\\u015A\": 'S',\n    \"\\u015C\": 'S',\n    \"\\u015E\": 'S',\n    \"\\u0160\": 'S',\n    \"\\u015B\": 's',\n    \"\\u015D\": 's',\n    \"\\u015F\": 's',\n    \"\\u0161\": 's',\n    \"\\u0162\": 'T',\n    \"\\u0164\": 'T',\n    \"\\u0166\": 'T',\n    \"\\u0163\": 't',\n    \"\\u0165\": 't',\n    \"\\u0167\": 't',\n    \"\\u0168\": 'U',\n    \"\\u016A\": 'U',\n    \"\\u016C\": 'U',\n    \"\\u016E\": 'U',\n    \"\\u0170\": 'U',\n    \"\\u0172\": 'U',\n    \"\\u0169\": 'u',\n    \"\\u016B\": 'u',\n    \"\\u016D\": 'u',\n    \"\\u016F\": 'u',\n    \"\\u0171\": 'u',\n    \"\\u0173\": 'u',\n    \"\\u0174\": 'W',\n    \"\\u0175\": 'w',\n    \"\\u0176\": 'Y',\n    \"\\u0177\": 'y',\n    \"\\u0178\": 'Y',\n    \"\\u0179\": 'Z',\n    \"\\u017B\": 'Z',\n    \"\\u017D\": 'Z',\n    \"\\u017A\": 'z',\n    \"\\u017C\": 'z',\n    \"\\u017E\": 'z',\n    \"\\u0132\": 'IJ',\n    \"\\u0133\": 'ij',\n    \"\\u0152\": 'Oe',\n    \"\\u0153\": 'oe',\n    \"\\u0149\": \"'n\",\n    \"\\u017F\": 's'\n  };\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n  /** Used to compose unicode character classes. */\n\n  var rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n      reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n      rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n      rsComboMarksExtendedRange = \"\\\\u1ab0-\\\\u1aff\",\n      rsComboMarksSupplementRange = \"\\\\u1dc0-\\\\u1dff\",\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;\n  /** Used to compose unicode capture groups. */\n\n  var rsCombo = '[' + rsComboRange + ']';\n  /**\r\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\r\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\r\n   */\n\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  function deburrLetter(key) {\n    return deburredLetters[key];\n  }\n\n  ;\n\n  function normalizeToBase(string) {\n    string = string.toString();\n    return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n  } // List of HTML entities for escaping.\n\n\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  }; // Functions for escaping and unescaping strings to/from HTML interpolation.\n\n  var createEscaper = function createEscaper(map) {\n    var escaper = function escaper(match) {\n      return map[match];\n    }; // Regexes for identifying a key that needs to be escaped.\n\n\n    var source = '(?:' + Object.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function (string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n\n  var htmlEscape = createEscaper(escapeMap);\n  /**\r\n   * ------------------------------------------------------------------------\r\n   * Constants\r\n   * ------------------------------------------------------------------------\r\n   */\n\n  var keyCodeMap = {\n    32: ' ',\n    48: '0',\n    49: '1',\n    50: '2',\n    51: '3',\n    52: '4',\n    53: '5',\n    54: '6',\n    55: '7',\n    56: '8',\n    57: '9',\n    59: ';',\n    65: 'A',\n    66: 'B',\n    67: 'C',\n    68: 'D',\n    69: 'E',\n    70: 'F',\n    71: 'G',\n    72: 'H',\n    73: 'I',\n    74: 'J',\n    75: 'K',\n    76: 'L',\n    77: 'M',\n    78: 'N',\n    79: 'O',\n    80: 'P',\n    81: 'Q',\n    82: 'R',\n    83: 'S',\n    84: 'T',\n    85: 'U',\n    86: 'V',\n    87: 'W',\n    88: 'X',\n    89: 'Y',\n    90: 'Z',\n    96: '0',\n    97: '1',\n    98: '2',\n    99: '3',\n    100: '4',\n    101: '5',\n    102: '6',\n    103: '7',\n    104: '8',\n    105: '9'\n  };\n  var keyCodes = {\n    ESCAPE: 27,\n    // KeyboardEvent.which value for Escape (Esc) key\n    ENTER: 13,\n    // KeyboardEvent.which value for Enter key\n    SPACE: 32,\n    // KeyboardEvent.which value for space key\n    TAB: 9,\n    // KeyboardEvent.which value for tab key\n    ARROW_UP: 38,\n    // KeyboardEvent.which value for up arrow key\n    ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key\n\n  };\n  var version = {\n    success: false,\n    major: '3'\n  };\n\n  try {\n    version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n    version.major = version.full[0];\n    version.success = true;\n  } catch (err) {// do nothing\n  }\n\n  var selectId = 0;\n  var EVENT_KEY = '.bs.select';\n  var classNames = {\n    DISABLED: 'disabled',\n    DIVIDER: 'divider',\n    SHOW: 'open',\n    DROPUP: 'dropup',\n    MENU: 'dropdown-menu',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    // to-do: replace with more advanced template/customization options\n    BUTTONCLASS: 'btn-default',\n    POPOVERHEADER: 'popover-title',\n    ICONBASE: 'glyphicon',\n    TICKICON: 'glyphicon-ok'\n  };\n  var Selector = {\n    MENU: '.' + classNames.MENU\n  };\n  var elementTemplates = {\n    div: document.createElement('div'),\n    span: document.createElement('span'),\n    i: document.createElement('i'),\n    subtext: document.createElement('small'),\n    a: document.createElement('a'),\n    li: document.createElement('li'),\n    whitespace: document.createTextNode(\"\\xA0\"),\n    fragment: document.createDocumentFragment()\n  };\n  elementTemplates.noResults = elementTemplates.li.cloneNode(false);\n  elementTemplates.noResults.className = 'no-results';\n  elementTemplates.a.setAttribute('role', 'option');\n  elementTemplates.a.className = 'dropdown-item';\n  elementTemplates.subtext.className = 'text-muted';\n  elementTemplates.text = elementTemplates.span.cloneNode(false);\n  elementTemplates.text.className = 'text';\n  elementTemplates.checkMark = elementTemplates.span.cloneNode(false);\n  var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);\n  var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);\n  var generateOption = {\n    li: function li(content, classes, optgroup) {\n      var li = elementTemplates.li.cloneNode(false);\n\n      if (content) {\n        if (content.nodeType === 1 || content.nodeType === 11) {\n          li.appendChild(content);\n        } else {\n          li.innerHTML = content;\n        }\n      }\n\n      if (typeof classes !== 'undefined' && classes !== '') li.className = classes;\n      if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);\n      return li;\n    },\n    a: function a(text, classes, inline) {\n      var a = elementTemplates.a.cloneNode(true);\n\n      if (text) {\n        if (text.nodeType === 11) {\n          a.appendChild(text);\n        } else {\n          a.insertAdjacentHTML('beforeend', text);\n        }\n      }\n\n      if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\\s+/));\n      if (inline) a.setAttribute('style', inline);\n      return a;\n    },\n    text: function text(options, useFragment) {\n      var textElement = elementTemplates.text.cloneNode(false),\n          subtextElement,\n          iconElement;\n\n      if (options.content) {\n        textElement.innerHTML = options.content;\n      } else {\n        textElement.textContent = options.text;\n\n        if (options.icon) {\n          var whitespace = elementTemplates.whitespace.cloneNode(false); // need to use <i> for icons in the button to prevent a breaking change\n          // note: switch to span in next major release\n\n          iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);\n          iconElement.className = this.options.iconBase + ' ' + options.icon;\n          elementTemplates.fragment.appendChild(iconElement);\n          elementTemplates.fragment.appendChild(whitespace);\n        }\n\n        if (options.subtext) {\n          subtextElement = elementTemplates.subtext.cloneNode(false);\n          subtextElement.textContent = options.subtext;\n          textElement.appendChild(subtextElement);\n        }\n      }\n\n      if (useFragment === true) {\n        while (textElement.childNodes.length > 0) {\n          elementTemplates.fragment.appendChild(textElement.childNodes[0]);\n        }\n      } else {\n        elementTemplates.fragment.appendChild(textElement);\n      }\n\n      return elementTemplates.fragment;\n    },\n    label: function label(options) {\n      var textElement = elementTemplates.text.cloneNode(false),\n          subtextElement,\n          iconElement;\n      textElement.innerHTML = options.display;\n\n      if (options.icon) {\n        var whitespace = elementTemplates.whitespace.cloneNode(false);\n        iconElement = elementTemplates.span.cloneNode(false);\n        iconElement.className = this.options.iconBase + ' ' + options.icon;\n        elementTemplates.fragment.appendChild(iconElement);\n        elementTemplates.fragment.appendChild(whitespace);\n      }\n\n      if (options.subtext) {\n        subtextElement = elementTemplates.subtext.cloneNode(false);\n        subtextElement.textContent = options.subtext;\n        textElement.appendChild(subtextElement);\n      }\n\n      elementTemplates.fragment.appendChild(textElement);\n      return elementTemplates.fragment;\n    }\n  };\n\n  function showNoResults(searchMatch, searchValue) {\n    if (!searchMatch.length) {\n      elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '\"' + htmlEscape(searchValue) + '\"');\n      this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);\n    }\n  }\n\n  var Selectpicker = function Selectpicker(element, options) {\n    var that = this; // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\n\n    if (!valHooks.useDefault) {\n      $.valHooks.select.set = valHooks._set;\n      valHooks.useDefault = true;\n    }\n\n    this.$element = $(element);\n    this.$newElement = null;\n    this.$button = null;\n    this.$menu = null;\n    this.options = options;\n    this.selectpicker = {\n      main: {},\n      search: {},\n      current: {},\n      // current changes if a search is in progress\n      view: {},\n      isSearching: false,\n      keydown: {\n        keyHistory: '',\n        resetKeyHistory: {\n          start: function start() {\n            return setTimeout(function () {\n              that.selectpicker.keydown.keyHistory = '';\n            }, 800);\n          }\n        }\n      }\n    };\n    this.sizeInfo = {}; // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n    // data-attribute)\n\n    if (this.options.title === null) {\n      this.options.title = this.$element.attr('title');\n    } // Format window padding\n\n\n    var winPad = this.options.windowPadding;\n\n    if (typeof winPad === 'number') {\n      this.options.windowPadding = [winPad, winPad, winPad, winPad];\n    } // Expose public methods\n\n\n    this.val = Selectpicker.prototype.val;\n    this.render = Selectpicker.prototype.render;\n    this.refresh = Selectpicker.prototype.refresh;\n    this.setStyle = Selectpicker.prototype.setStyle;\n    this.selectAll = Selectpicker.prototype.selectAll;\n    this.deselectAll = Selectpicker.prototype.deselectAll;\n    this.destroy = Selectpicker.prototype.destroy;\n    this.remove = Selectpicker.prototype.remove;\n    this.show = Selectpicker.prototype.show;\n    this.hide = Selectpicker.prototype.hide;\n    this.init();\n  };\n\n  Selectpicker.VERSION = '1.13.17'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n\n  Selectpicker.DEFAULTS = {\n    noneSelectedText: 'Nothing selected',\n    noneResultsText: 'No results matched {0}',\n    countSelectedText: function countSelectedText(numSelected, numTotal) {\n      return numSelected == 1 ? '{0} item selected' : '{0} items selected';\n    },\n    maxOptionsText: function maxOptionsText(numAll, numGroup) {\n      return [numAll == 1 ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', numGroup == 1 ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'];\n    },\n    selectAllText: 'Select All',\n    deselectAllText: 'Deselect All',\n    doneButton: false,\n    doneButtonText: 'Close',\n    multipleSeparator: ', ',\n    styleBase: 'btn',\n    style: classNames.BUTTONCLASS,\n    size: 'auto',\n    title: null,\n    selectedTextFormat: 'values',\n    width: false,\n    container: false,\n    hideDisabled: false,\n    showSubtext: false,\n    showIcon: true,\n    showContent: true,\n    dropupAuto: true,\n    header: false,\n    liveSearch: false,\n    liveSearchPlaceholder: null,\n    liveSearchNormalize: false,\n    liveSearchStyle: 'contains',\n    actionsBox: false,\n    iconBase: classNames.ICONBASE,\n    tickIcon: classNames.TICKICON,\n    showTick: false,\n    template: {\n      caret: '<span class=\"caret\"></span>'\n    },\n    maxOptions: false,\n    mobile: false,\n    selectOnTab: false,\n    dropdownAlignRight: false,\n    windowPadding: 0,\n    virtualScroll: 600,\n    display: false,\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  Selectpicker.prototype = {\n    constructor: Selectpicker,\n    init: function init() {\n      var that = this,\n          id = this.$element.attr('id');\n      selectId++;\n      this.selectId = 'bs-select-' + selectId;\n      this.$element[0].classList.add('bs-select-hidden');\n      this.multiple = this.$element.prop('multiple');\n      this.autofocus = this.$element.prop('autofocus');\n\n      if (this.$element[0].classList.contains('show-tick')) {\n        this.options.showTick = true;\n      }\n\n      this.$newElement = this.createDropdown();\n      this.buildData();\n      this.$element.after(this.$newElement).prependTo(this.$newElement);\n      this.$button = this.$newElement.children('button');\n      this.$menu = this.$newElement.children(Selector.MENU);\n      this.$menuInner = this.$menu.children('.inner');\n      this.$searchbox = this.$menu.find('input');\n      this.$element[0].classList.remove('bs-select-hidden');\n      if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);\n\n      if (typeof id !== 'undefined') {\n        this.$button.attr('data-id', id);\n      }\n\n      this.checkDisabled();\n      this.clickListener();\n\n      if (this.options.liveSearch) {\n        this.liveSearchListener();\n        this.focusedParent = this.$searchbox[0];\n      } else {\n        this.focusedParent = this.$menuInner[0];\n      }\n\n      this.setStyle();\n      this.render();\n      this.setWidth();\n\n      if (this.options.container) {\n        this.selectPosition();\n      } else {\n        this.$element.on('hide' + EVENT_KEY, function () {\n          if (that.isVirtual()) {\n            // empty menu on close\n            var menuInner = that.$menuInner[0],\n                emptyMenu = menuInner.firstChild.cloneNode(false); // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''\n\n            menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n            menuInner.scrollTop = 0;\n          }\n        });\n      }\n\n      this.$menu.data('this', this);\n      this.$newElement.data('this', this);\n      if (this.options.mobile) this.mobile();\n      this.$newElement.on({\n        'hide.bs.dropdown': function hideBsDropdown(e) {\n          that.$element.trigger('hide' + EVENT_KEY, e);\n        },\n        'hidden.bs.dropdown': function hiddenBsDropdown(e) {\n          that.$element.trigger('hidden' + EVENT_KEY, e);\n        },\n        'show.bs.dropdown': function showBsDropdown(e) {\n          that.$element.trigger('show' + EVENT_KEY, e);\n        },\n        'shown.bs.dropdown': function shownBsDropdown(e) {\n          that.$element.trigger('shown' + EVENT_KEY, e);\n        }\n      });\n\n      if (that.$element[0].hasAttribute('required')) {\n        this.$element.on('invalid' + EVENT_KEY, function () {\n          that.$button[0].classList.add('bs-invalid');\n          that.$element.on('shown' + EVENT_KEY + '.invalid', function () {\n            that.$element.val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\n            .off('shown' + EVENT_KEY + '.invalid');\n          }).on('rendered' + EVENT_KEY, function () {\n            // if select is no longer invalid, remove the bs-invalid class\n            if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');\n            that.$element.off('rendered' + EVENT_KEY);\n          });\n          that.$button.on('blur' + EVENT_KEY, function () {\n            that.$element.trigger('focus').trigger('blur');\n            that.$button.off('blur' + EVENT_KEY);\n          });\n        });\n      }\n\n      setTimeout(function () {\n        that.buildList();\n        that.$element.trigger('loaded' + EVENT_KEY);\n      });\n    },\n    createDropdown: function createDropdown() {\n      // Options\n      // If we are multiple or showTick option is set, then add the show-tick class\n      var showTick = this.multiple || this.options.showTick ? ' show-tick' : '',\n          multiselectable = this.multiple ? ' aria-multiselectable=\"true\"' : '',\n          inputGroup = '',\n          autofocus = this.autofocus ? ' autofocus' : '';\n\n      if (version.major < 4 && this.$element.parent().hasClass('input-group')) {\n        inputGroup = ' input-group-btn';\n      } // Elements\n\n\n      var drop,\n          header = '',\n          searchbox = '',\n          actionsbox = '',\n          donebutton = '';\n\n      if (this.options.header) {\n        header = '<div class=\"' + classNames.POPOVERHEADER + '\">' + '<button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button>' + this.options.header + '</div>';\n      }\n\n      if (this.options.liveSearch) {\n        searchbox = '<div class=\"bs-searchbox\">' + '<input type=\"search\" class=\"form-control\" autocomplete=\"off\"' + (this.options.liveSearchPlaceholder === null ? '' : ' placeholder=\"' + htmlEscape(this.options.liveSearchPlaceholder) + '\"') + ' role=\"combobox\" aria-label=\"Search\" aria-controls=\"' + this.selectId + '\" aria-autocomplete=\"list\">' + '</div>';\n      }\n\n      if (this.multiple && this.options.actionsBox) {\n        actionsbox = '<div class=\"bs-actionsbox\">' + '<div class=\"btn-group btn-group-sm btn-block\">' + '<button type=\"button\" class=\"actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.selectAllText + '</button>' + '<button type=\"button\" class=\"actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.deselectAllText + '</button>' + '</div>' + '</div>';\n      }\n\n      if (this.multiple && this.options.doneButton) {\n        donebutton = '<div class=\"bs-donebutton\">' + '<div class=\"btn-group btn-block\">' + '<button type=\"button\" class=\"btn btn-sm ' + classNames.BUTTONCLASS + '\">' + this.options.doneButtonText + '</button>' + '</div>' + '</div>';\n      }\n\n      drop = '<div class=\"dropdown bootstrap-select' + showTick + inputGroup + '\">' + '<button type=\"button\" tabindex=\"-1\" class=\"' + this.options.styleBase + ' dropdown-toggle\" ' + (this.options.display === 'static' ? 'data-display=\"static\"' : '') + 'data-toggle=\"dropdown\"' + autofocus + ' role=\"combobox\" aria-owns=\"' + this.selectId + '\" aria-haspopup=\"listbox\" aria-expanded=\"false\">' + '<div class=\"filter-option\">' + '<div class=\"filter-option-inner\">' + '<div class=\"filter-option-inner-inner\"></div>' + '</div> ' + '</div>' + (version.major === '4' ? '' : '<span class=\"bs-caret\">' + this.options.template.caret + '</span>') + '</button>' + '<div class=\"' + classNames.MENU + ' ' + (version.major === '4' ? '' : classNames.SHOW) + '\">' + header + searchbox + actionsbox + '<div class=\"inner ' + classNames.SHOW + '\" role=\"listbox\" id=\"' + this.selectId + '\" tabindex=\"-1\" ' + multiselectable + '>' + '<ul class=\"' + classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '') + '\" role=\"presentation\">' + '</ul>' + '</div>' + donebutton + '</div>' + '</div>';\n      return $(drop);\n    },\n    setPositionData: function setPositionData() {\n      this.selectpicker.view.canHighlight = [];\n      this.selectpicker.view.size = 0;\n\n      for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n        var li = this.selectpicker.current.data[i],\n            canHighlight = true;\n\n        if (li.type === 'divider') {\n          canHighlight = false;\n          li.height = this.sizeInfo.dividerHeight;\n        } else if (li.type === 'optgroup-label') {\n          canHighlight = false;\n          li.height = this.sizeInfo.dropdownHeaderHeight;\n        } else {\n          li.height = this.sizeInfo.liHeight;\n        }\n\n        if (li.disabled) canHighlight = false;\n        this.selectpicker.view.canHighlight.push(canHighlight);\n\n        if (canHighlight) {\n          this.selectpicker.view.size++;\n          li.posinset = this.selectpicker.view.size;\n        }\n\n        li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;\n      }\n    },\n    isVirtual: function isVirtual() {\n      return this.options.virtualScroll !== false && this.selectpicker.main.elements.length >= this.options.virtualScroll || this.options.virtualScroll === true;\n    },\n    createView: function createView(isSearching, setSize, refresh) {\n      var that = this,\n          scrollTop = 0,\n          active = [],\n          selected,\n          prevActive;\n      this.selectpicker.isSearching = isSearching;\n      this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;\n      this.setPositionData();\n\n      if (setSize) {\n        if (refresh) {\n          scrollTop = this.$menuInner[0].scrollTop;\n        } else if (!that.multiple) {\n          var element = that.$element[0],\n              selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n          if (typeof selectedIndex === 'number' && that.options.size !== false) {\n            var selectedData = that.selectpicker.main.data[selectedIndex],\n                position = selectedData && selectedData.position;\n\n            if (position) {\n              scrollTop = position - (that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2;\n            }\n          }\n        }\n      }\n\n      scroll(scrollTop, true);\n      this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {\n        if (!that.noScroll) scroll(this.scrollTop, updateValue);\n        that.noScroll = false;\n      });\n\n      function scroll(scrollTop, init) {\n        var size = that.selectpicker.current.elements.length,\n            chunks = [],\n            chunkSize,\n            chunkCount,\n            firstChunk,\n            lastChunk,\n            currentChunk,\n            prevPositions,\n            positionIsDifferent,\n            previousElements,\n            menuIsDifferent = true,\n            isVirtual = that.isVirtual();\n        that.selectpicker.view.scrollTop = scrollTop;\n        chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk\n\n        chunkCount = Math.round(size / chunkSize) || 1; // number of chunks\n\n        for (var i = 0; i < chunkCount; i++) {\n          var endOfChunk = (i + 1) * chunkSize;\n\n          if (i === chunkCount - 1) {\n            endOfChunk = size;\n          }\n\n          chunks[i] = [i * chunkSize + (!i ? 0 : 1), endOfChunk];\n          if (!size) break;\n\n          if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {\n            currentChunk = i;\n          }\n        }\n\n        if (currentChunk === undefined) currentChunk = 0;\n        prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; // always display previous, current, and next chunks\n\n        firstChunk = Math.max(0, currentChunk - 1);\n        lastChunk = Math.min(chunkCount - 1, currentChunk + 1);\n        that.selectpicker.view.position0 = isVirtual === false ? 0 : Math.max(0, chunks[firstChunk][0]) || 0;\n        that.selectpicker.view.position1 = isVirtual === false ? size : Math.min(size, chunks[lastChunk][1]) || 0;\n        positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;\n\n        if (that.activeIndex !== undefined) {\n          prevActive = that.selectpicker.main.elements[that.prevActiveIndex];\n          active = that.selectpicker.main.elements[that.activeIndex];\n          selected = that.selectpicker.main.elements[that.selectedIndex];\n\n          if (init) {\n            if (that.activeIndex !== that.selectedIndex) {\n              that.defocusItem(active);\n            }\n\n            that.activeIndex = undefined;\n          }\n\n          if (that.activeIndex && that.activeIndex !== that.selectedIndex) {\n            that.defocusItem(selected);\n          }\n        }\n\n        if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {\n          that.defocusItem(prevActive);\n        }\n\n        if (init || positionIsDifferent) {\n          previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];\n\n          if (isVirtual === false) {\n            that.selectpicker.view.visibleElements = that.selectpicker.current.elements;\n          } else {\n            that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);\n          }\n\n          that.setOptionStatus(); // if searching, check to make sure the list has actually been updated before updating DOM\n          // this prevents unnecessary repaints\n\n          if (isSearching || isVirtual === false && init) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); // if virtual scroll is disabled and not searching,\n          // menu should never need to be updated more than once\n\n          if ((init || isVirtual === true) && menuIsDifferent) {\n            var menuInner = that.$menuInner[0],\n                menuFragment = document.createDocumentFragment(),\n                emptyMenu = menuInner.firstChild.cloneNode(false),\n                marginTop,\n                marginBottom,\n                elements = that.selectpicker.view.visibleElements,\n                toSanitize = []; // replace the existing UL with an empty one - this is faster than $.empty()\n\n            menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n\n            for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {\n              var element = elements[i],\n                  elText,\n                  elementData;\n\n              if (that.options.sanitize) {\n                elText = element.lastChild;\n\n                if (elText) {\n                  elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];\n\n                  if (elementData && elementData.content && !elementData.sanitized) {\n                    toSanitize.push(elText);\n                    elementData.sanitized = true;\n                  }\n                }\n              }\n\n              menuFragment.appendChild(element);\n            }\n\n            if (that.options.sanitize && toSanitize.length) {\n              sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);\n            }\n\n            if (isVirtual === true) {\n              marginTop = that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position;\n              marginBottom = that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position;\n              menuInner.firstChild.style.marginTop = marginTop + 'px';\n              menuInner.firstChild.style.marginBottom = marginBottom + 'px';\n            } else {\n              menuInner.firstChild.style.marginTop = 0;\n              menuInner.firstChild.style.marginBottom = 0;\n            }\n\n            menuInner.firstChild.appendChild(menuFragment); // if an option is encountered that is wider than the current menu width, update the menu width accordingly\n            // switch to ResizeObserver with increased browser support\n\n            if (isVirtual === true && that.sizeInfo.hasScrollBar) {\n              var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;\n\n              if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {\n                menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n              } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {\n                // set to 0 to get actual width of menu\n                that.$menu[0].style.minWidth = 0;\n                var actualMenuWidth = menuInner.firstChild.offsetWidth;\n\n                if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {\n                  that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;\n                  menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n                } // reset to default CSS styling\n\n\n                that.$menu[0].style.minWidth = '';\n              }\n            }\n          }\n        }\n\n        that.prevActiveIndex = that.activeIndex;\n\n        if (!that.options.liveSearch) {\n          that.$menuInner.trigger('focus');\n        } else if (isSearching && init) {\n          var index = 0,\n              newActive;\n\n          if (!that.selectpicker.view.canHighlight[index]) {\n            index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);\n          }\n\n          newActive = that.selectpicker.view.visibleElements[index];\n          that.defocusItem(that.selectpicker.view.currentActive);\n          that.activeIndex = (that.selectpicker.current.data[index] || {}).index;\n          that.focusItem(newActive);\n        }\n      }\n\n      $(window).off('resize' + EVENT_KEY + '.' + this.selectId + '.createView').on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {\n        var isActive = that.$newElement.hasClass(classNames.SHOW);\n        if (isActive) scroll(that.$menuInner[0].scrollTop);\n      });\n    },\n    focusItem: function focusItem(li, liData, noStyle) {\n      if (li) {\n        liData = liData || this.selectpicker.main.data[this.activeIndex];\n        var a = li.firstChild;\n\n        if (a) {\n          a.setAttribute('aria-setsize', this.selectpicker.view.size);\n          a.setAttribute('aria-posinset', liData.posinset);\n\n          if (noStyle !== true) {\n            this.focusedParent.setAttribute('aria-activedescendant', a.id);\n            li.classList.add('active');\n            a.classList.add('active');\n          }\n        }\n      }\n    },\n    defocusItem: function defocusItem(li) {\n      if (li) {\n        li.classList.remove('active');\n        if (li.firstChild) li.firstChild.classList.remove('active');\n      }\n    },\n    setPlaceholder: function setPlaceholder() {\n      var that = this,\n          updateIndex = false;\n\n      if (this.options.title && !this.multiple) {\n        if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); // this option doesn't create a new <li> element, but does add a new option at the start,\n        // so startIndex should increase to prevent having to check every option for the bs-title-option class\n\n        updateIndex = true;\n        var element = this.$element[0],\n            selectTitleOption = false,\n            titleNotAppended = !this.selectpicker.view.titleOption.parentNode,\n            selectedIndex = element.selectedIndex,\n            selectedOption = element.options[selectedIndex],\n            navigation = window.performance && window.performance.getEntriesByType('navigation');\n\n        if (titleNotAppended) {\n          // Use native JS to prepend option (faster)\n          this.selectpicker.view.titleOption.className = 'bs-title-option';\n          this.selectpicker.view.titleOption.value = ''; // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\n          // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\n          // if so, the select will have the data-selected attribute\n\n          selectTitleOption = !selectedOption || selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined;\n        }\n\n        if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {\n          element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);\n        } // Set selected *after* appending to select,\n        // otherwise the option doesn't get selected in IE\n        // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11\n\n\n        if (selectTitleOption && navigation.length && navigation[0].type !== 'back_forward') {\n          element.selectedIndex = 0;\n        } else if (document.readyState !== 'complete') {\n          // if navigation type is back_forward, there's a chance the select will have its value set by BFCache\n          // wait for that value to be set, then run render again\n          window.addEventListener('pageshow', function () {\n            if (that.selectpicker.view.displayedValue !== element.value) that.render();\n          });\n        }\n      }\n\n      return updateIndex;\n    },\n    buildData: function buildData() {\n      var optionSelector = ':not([hidden]):not([data-hidden=\"true\"])',\n          mainData = [],\n          optID = 0,\n          startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop\n\n      if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\n      var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);\n\n      function addDivider(config) {\n        var previousData = mainData[mainData.length - 1]; // ensure optgroup doesn't create back-to-back dividers\n\n        if (previousData && previousData.type === 'divider' && (previousData.optID || config.optID)) {\n          return;\n        }\n\n        config = config || {};\n        config.type = 'divider';\n        mainData.push(config);\n      }\n\n      function addOption(option, config) {\n        config = config || {};\n        config.divider = option.getAttribute('data-divider') === 'true';\n\n        if (config.divider) {\n          addDivider({\n            optID: config.optID\n          });\n        } else {\n          var liIndex = mainData.length,\n              cssText = option.style.cssText,\n              inlineStyle = cssText ? htmlEscape(cssText) : '',\n              optionClass = (option.className || '') + (config.optgroupClass || '');\n          if (config.optID) optionClass = 'opt ' + optionClass;\n          config.optionClass = optionClass.trim();\n          config.inlineStyle = inlineStyle;\n          config.text = option.textContent;\n          config.content = option.getAttribute('data-content');\n          config.tokens = option.getAttribute('data-tokens');\n          config.subtext = option.getAttribute('data-subtext');\n          config.icon = option.getAttribute('data-icon');\n          option.liIndex = liIndex;\n          config.display = config.content || config.text;\n          config.type = 'option';\n          config.index = liIndex;\n          config.option = option;\n          config.selected = !!option.selected;\n          config.disabled = config.disabled || !!option.disabled;\n          mainData.push(config);\n        }\n      }\n\n      function addOptgroup(index, selectOptions) {\n        var optgroup = selectOptions[index],\n            // skip placeholder option\n        previous = index - 1 < startIndex ? false : selectOptions[index - 1],\n            next = selectOptions[index + 1],\n            options = optgroup.querySelectorAll('option' + optionSelector);\n        if (!options.length) return;\n        var config = {\n          display: htmlEscape(optgroup.label),\n          subtext: optgroup.getAttribute('data-subtext'),\n          icon: optgroup.getAttribute('data-icon'),\n          type: 'optgroup-label',\n          optgroupClass: ' ' + (optgroup.className || '')\n        },\n            headerIndex,\n            lastIndex;\n        optID++;\n\n        if (previous) {\n          addDivider({\n            optID: optID\n          });\n        }\n\n        config.optID = optID;\n        mainData.push(config);\n\n        for (var j = 0, len = options.length; j < len; j++) {\n          var option = options[j];\n\n          if (j === 0) {\n            headerIndex = mainData.length - 1;\n            lastIndex = headerIndex + len;\n          }\n\n          addOption(option, {\n            headerIndex: headerIndex,\n            lastIndex: lastIndex,\n            optID: config.optID,\n            optgroupClass: config.optgroupClass,\n            disabled: optgroup.disabled\n          });\n        }\n\n        if (next) {\n          addDivider({\n            optID: optID\n          });\n        }\n      }\n\n      for (var len = selectOptions.length, i = startIndex; i < len; i++) {\n        var item = selectOptions[i];\n\n        if (item.tagName !== 'OPTGROUP') {\n          addOption(item, {});\n        } else {\n          addOptgroup(i, selectOptions);\n        }\n      }\n\n      this.selectpicker.main.data = this.selectpicker.current.data = mainData;\n    },\n    buildList: function buildList() {\n      var that = this,\n          selectData = this.selectpicker.main.data,\n          mainElements = [],\n          widestOptionLength = 0;\n\n      if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {\n        elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';\n        elementTemplates.a.appendChild(elementTemplates.checkMark);\n      }\n\n      function buildElement(item) {\n        var liElement,\n            combinedLength = 0;\n\n        switch (item.type) {\n          case 'divider':\n            liElement = generateOption.li(false, classNames.DIVIDER, item.optID ? item.optID + 'div' : undefined);\n            break;\n\n          case 'option':\n            liElement = generateOption.li(generateOption.a(generateOption.text.call(that, item), item.optionClass, item.inlineStyle), '', item.optID);\n\n            if (liElement.firstChild) {\n              liElement.firstChild.id = that.selectId + '-' + item.index;\n            }\n\n            break;\n\n          case 'optgroup-label':\n            liElement = generateOption.li(generateOption.label.call(that, item), 'dropdown-header' + item.optgroupClass, item.optID);\n            break;\n        }\n\n        item.element = liElement;\n        mainElements.push(liElement); // count the number of characters in the option - not perfect, but should work in most cases\n\n        if (item.display) combinedLength += item.display.length;\n        if (item.subtext) combinedLength += item.subtext.length; // if there is an icon, ensure this option's width is checked\n\n        if (item.icon) combinedLength += 1;\n\n        if (combinedLength > widestOptionLength) {\n          widestOptionLength = combinedLength; // guess which option is the widest\n          // use this when calculating menu width\n          // not perfect, but it's fast, and the width will be updating accordingly when scrolling\n\n          that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];\n        }\n      }\n\n      for (var len = selectData.length, i = 0; i < len; i++) {\n        var item = selectData[i];\n        buildElement(item);\n      }\n\n      this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;\n    },\n    findLis: function findLis() {\n      return this.$menuInner.find('.inner > li');\n    },\n    render: function render() {\n      var that = this,\n          element = this.$element[0],\n          // ensure titleOption is appended and selected (if necessary) before getting selectedOptions\n      placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,\n          selectedOptions = getSelectedOptions(element, this.options.hideDisabled),\n          selectedCount = selectedOptions.length,\n          button = this.$button[0],\n          buttonInner = button.querySelector('.filter-option-inner-inner'),\n          multipleSeparator = document.createTextNode(this.options.multipleSeparator),\n          titleFragment = elementTemplates.fragment.cloneNode(false),\n          showCount,\n          countMax,\n          hasContent = false;\n      button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));\n\n      if (!that.multiple && selectedOptions.length === 1) {\n        that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);\n      }\n\n      if (this.options.selectedTextFormat === 'static') {\n        titleFragment = generateOption.text.call(this, {\n          text: this.options.title\n        }, true);\n      } else {\n        showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1; // determine if the number of selected options will be shown (showCount === true)\n\n        if (showCount) {\n          countMax = this.options.selectedTextFormat.split('>');\n          showCount = countMax.length > 1 && selectedCount > countMax[1] || countMax.length === 1 && selectedCount >= 2;\n        } // only loop through all selected options if the count won't be shown\n\n\n        if (showCount === false) {\n          if (!placeholderSelected) {\n            for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {\n              if (selectedIndex < 50) {\n                var option = selectedOptions[selectedIndex],\n                    thisData = this.selectpicker.main.data[option.liIndex],\n                    titleOptions = {};\n\n                if (this.multiple && selectedIndex > 0) {\n                  titleFragment.appendChild(multipleSeparator.cloneNode(false));\n                }\n\n                if (option.title) {\n                  titleOptions.text = option.title;\n                } else if (thisData) {\n                  if (thisData.content && that.options.showContent) {\n                    titleOptions.content = thisData.content.toString();\n                    hasContent = true;\n                  } else {\n                    if (that.options.showIcon) {\n                      titleOptions.icon = thisData.icon;\n                    }\n\n                    if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;\n                    titleOptions.text = option.textContent.trim();\n                  }\n                }\n\n                titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));\n              } else {\n                break;\n              }\n            } // add ellipsis\n\n\n            if (selectedCount > 49) {\n              titleFragment.appendChild(document.createTextNode('...'));\n            }\n          }\n        } else {\n          var optionSelector = ':not([hidden]):not([data-hidden=\"true\"]):not([data-divider=\"true\"])';\n          if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.\n\n          var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,\n              tr8nText = typeof this.options.countSelectedText === 'function' ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;\n          titleFragment = generateOption.text.call(this, {\n            text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())\n          }, true);\n        }\n      }\n\n      if (this.options.title == undefined) {\n        // use .attr to ensure undefined is returned if title attribute is not set\n        this.options.title = this.$element.attr('title');\n      } // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText\n\n\n      if (!titleFragment.childNodes.length) {\n        titleFragment = generateOption.text.call(this, {\n          text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText\n        }, true);\n      } // strip all HTML tags and trim the result, then unescape any escaped tags\n\n\n      button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();\n\n      if (this.options.sanitize && hasContent) {\n        sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);\n      }\n\n      buttonInner.innerHTML = '';\n      buttonInner.appendChild(titleFragment);\n\n      if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {\n        var filterExpand = button.querySelector('.filter-expand'),\n            clone = buttonInner.cloneNode(true);\n        clone.className = 'filter-expand';\n\n        if (filterExpand) {\n          button.replaceChild(clone, filterExpand);\n        } else {\n          button.appendChild(clone);\n        }\n      }\n\n      this.$element.trigger('rendered' + EVENT_KEY);\n    },\n\n    /**\r\n     * @param [style]\r\n     * @param [status]\r\n     */\n    setStyle: function setStyle(newStyle, status) {\n      var button = this.$button[0],\n          newElement = this.$newElement[0],\n          style = this.options.style.trim(),\n          buttonClass;\n\n      if (this.$element.attr('class')) {\n        this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n      }\n\n      if (version.major < 4) {\n        newElement.classList.add('bs3');\n\n        if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') && (newElement.previousElementSibling || newElement.nextElementSibling) && (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')) {\n          newElement.classList.add('bs3-has-addon');\n        }\n      }\n\n      if (newStyle) {\n        buttonClass = newStyle.trim();\n      } else {\n        buttonClass = style;\n      }\n\n      if (status == 'add') {\n        if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n      } else if (status == 'remove') {\n        if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));\n      } else {\n        if (style) button.classList.remove.apply(button.classList, style.split(' '));\n        if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n      }\n    },\n    liHeight: function liHeight(refresh) {\n      if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;\n      var newElement = elementTemplates.div.cloneNode(false),\n          menu = elementTemplates.div.cloneNode(false),\n          menuInner = elementTemplates.div.cloneNode(false),\n          menuInnerInner = document.createElement('ul'),\n          divider = elementTemplates.li.cloneNode(false),\n          dropdownHeader = elementTemplates.li.cloneNode(false),\n          li,\n          a = elementTemplates.a.cloneNode(false),\n          text = elementTemplates.span.cloneNode(false),\n          header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,\n          search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,\n          actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\n          doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,\n          firstOption = this.$element.find('option')[0];\n      this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;\n      text.className = 'text';\n      a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');\n      newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;\n      newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating\n\n      if (this.options.width === 'auto') menu.style.minWidth = 0;\n      menu.className = classNames.MENU + ' ' + classNames.SHOW;\n      menuInner.className = 'inner ' + classNames.SHOW;\n      menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');\n      divider.className = classNames.DIVIDER;\n      dropdownHeader.className = 'dropdown-header';\n      text.appendChild(document.createTextNode(\"\\u200B\"));\n\n      if (this.selectpicker.current.data.length) {\n        for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n          var data = this.selectpicker.current.data[i];\n\n          if (data.type === 'option') {\n            li = data.element;\n            break;\n          }\n        }\n      } else {\n        li = elementTemplates.li.cloneNode(false);\n        a.appendChild(text);\n        li.appendChild(a);\n      }\n\n      dropdownHeader.appendChild(text.cloneNode(true));\n\n      if (this.selectpicker.view.widestOption) {\n        menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));\n      }\n\n      menuInnerInner.appendChild(li);\n      menuInnerInner.appendChild(divider);\n      menuInnerInner.appendChild(dropdownHeader);\n      if (header) menu.appendChild(header);\n\n      if (search) {\n        var input = document.createElement('input');\n        search.className = 'bs-searchbox';\n        input.className = 'form-control';\n        search.appendChild(input);\n        menu.appendChild(search);\n      }\n\n      if (actions) menu.appendChild(actions);\n      menuInner.appendChild(menuInnerInner);\n      menu.appendChild(menuInner);\n      if (doneButton) menu.appendChild(doneButton);\n      newElement.appendChild(menu);\n      document.body.appendChild(newElement);\n      var liHeight = li.offsetHeight,\n          dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,\n          headerHeight = header ? header.offsetHeight : 0,\n          searchHeight = search ? search.offsetHeight : 0,\n          actionsHeight = actions ? actions.offsetHeight : 0,\n          doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\n          dividerHeight = $(divider).outerHeight(true),\n          // fall back to jQuery if getComputedStyle is not supported\n      menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false,\n          menuWidth = menu.offsetWidth,\n          $menu = menuStyle ? null : $(menu),\n          menuPadding = {\n        vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\n        horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\n      },\n          menuExtras = {\n        vert: menuPadding.vert + toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\n        horiz: menuPadding.horiz + toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\n      },\n          scrollBarWidth;\n      menuInner.style.overflowY = 'scroll';\n      scrollBarWidth = menu.offsetWidth - menuWidth;\n      document.body.removeChild(newElement);\n      this.sizeInfo.liHeight = liHeight;\n      this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;\n      this.sizeInfo.headerHeight = headerHeight;\n      this.sizeInfo.searchHeight = searchHeight;\n      this.sizeInfo.actionsHeight = actionsHeight;\n      this.sizeInfo.doneButtonHeight = doneButtonHeight;\n      this.sizeInfo.dividerHeight = dividerHeight;\n      this.sizeInfo.menuPadding = menuPadding;\n      this.sizeInfo.menuExtras = menuExtras;\n      this.sizeInfo.menuWidth = menuWidth;\n      this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;\n      this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;\n      this.sizeInfo.scrollBarWidth = scrollBarWidth;\n      this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;\n      this.setPositionData();\n    },\n    getSelectPosition: function getSelectPosition() {\n      var that = this,\n          $window = $(window),\n          pos = that.$newElement.offset(),\n          $container = $(that.options.container),\n          containerPos;\n\n      if (that.options.container && $container.length && !$container.is('body')) {\n        containerPos = $container.offset();\n        containerPos.top += parseInt($container.css('borderTopWidth'));\n        containerPos.left += parseInt($container.css('borderLeftWidth'));\n      } else {\n        containerPos = {\n          top: 0,\n          left: 0\n        };\n      }\n\n      var winPad = that.options.windowPadding;\n      this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\n      this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];\n      this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\n      this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];\n      this.sizeInfo.selectOffsetTop -= winPad[0];\n      this.sizeInfo.selectOffsetLeft -= winPad[3];\n    },\n    setMenuSize: function setMenuSize(isAuto) {\n      this.getSelectPosition();\n\n      var selectWidth = this.sizeInfo.selectWidth,\n          liHeight = this.sizeInfo.liHeight,\n          headerHeight = this.sizeInfo.headerHeight,\n          searchHeight = this.sizeInfo.searchHeight,\n          actionsHeight = this.sizeInfo.actionsHeight,\n          doneButtonHeight = this.sizeInfo.doneButtonHeight,\n          divHeight = this.sizeInfo.dividerHeight,\n          menuPadding = this.sizeInfo.menuPadding,\n          menuInnerHeight,\n          menuHeight,\n          divLength = 0,\n          minHeight,\n          _minHeight,\n          maxHeight,\n          menuInnerMinHeight,\n          estimate,\n          isDropup;\n\n      if (this.options.dropupAuto) {\n        // Get the estimated height of the menu without scrollbars.\n        // This is useful for smaller menus, where there might be plenty of room\n        // below the button without setting dropup, but we can't know\n        // the exact height of the menu until createView is called later\n        estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert;\n        isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot; // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)\n\n        if (this.selectpicker.isSearching === true) {\n          isDropup = this.selectpicker.dropup;\n        }\n\n        this.$newElement.toggleClass(classNames.DROPUP, isDropup);\n        this.selectpicker.dropup = isDropup;\n      }\n\n      if (this.options.size === 'auto') {\n        _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;\n        menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;\n        minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n        menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);\n\n        if (this.$newElement.hasClass(classNames.DROPUP)) {\n          menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;\n        }\n\n        maxHeight = menuHeight;\n        menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\n      } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n        for (var i = 0; i < this.options.size; i++) {\n          if (this.selectpicker.current.data[i].type === 'divider') divLength++;\n        }\n\n        menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\n        menuInnerHeight = menuHeight - menuPadding.vert;\n        maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n        minHeight = menuInnerMinHeight = '';\n      }\n\n      this.$menu.css({\n        'max-height': maxHeight + 'px',\n        'overflow': 'hidden',\n        'min-height': minHeight + 'px'\n      });\n      this.$menuInner.css({\n        'max-height': menuInnerHeight + 'px',\n        'overflow-y': 'auto',\n        'min-height': menuInnerMinHeight + 'px'\n      }); // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView\n\n      this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);\n\n      if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {\n        this.sizeInfo.hasScrollBar = true;\n        this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;\n      }\n\n      if (this.options.dropdownAlignRight === 'auto') {\n        this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < this.sizeInfo.totalMenuWidth - selectWidth);\n      }\n\n      if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();\n    },\n    setSize: function setSize(refresh) {\n      this.liHeight(refresh);\n      if (this.options.header) this.$menu.css('padding-top', 0);\n\n      if (this.options.size !== false) {\n        var that = this,\n            $window = $(window);\n        this.setMenuSize();\n\n        if (this.options.liveSearch) {\n          this.$searchbox.off('input.setMenuSize propertychange.setMenuSize').on('input.setMenuSize propertychange.setMenuSize', function () {\n            return that.setMenuSize();\n          });\n        }\n\n        if (this.options.size === 'auto') {\n          $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize').on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {\n            return that.setMenuSize();\n          });\n        } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n          $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');\n        }\n      }\n\n      this.createView(false, true, refresh);\n    },\n    setWidth: function setWidth() {\n      var that = this;\n\n      if (this.options.width === 'auto') {\n        requestAnimationFrame(function () {\n          that.$menu.css('min-width', '0');\n          that.$element.on('loaded' + EVENT_KEY, function () {\n            that.liHeight();\n            that.setMenuSize(); // Get correct width if element is hidden\n\n            var $selectClone = that.$newElement.clone().appendTo('body'),\n                btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();\n            $selectClone.remove(); // Set width to whatever's larger, button title or longest option\n\n            that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);\n            that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');\n          });\n        });\n      } else if (this.options.width === 'fit') {\n        // Remove inline min-width so width can be changed from 'auto'\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', '').addClass('fit-width');\n      } else if (this.options.width) {\n        // Remove inline min-width so width can be changed from 'auto'\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', this.options.width);\n      } else {\n        // Remove inline min-width/width so width can be changed\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', '');\n      } // Remove fit-width class if width is changed programmatically\n\n\n      if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n        this.$newElement[0].classList.remove('fit-width');\n      }\n    },\n    selectPosition: function selectPosition() {\n      this.$bsContainer = $('<div class=\"bs-container\" />');\n\n      var that = this,\n          $container = $(this.options.container),\n          pos,\n          containerPos,\n          actualHeight,\n          getPlacement = function getPlacement($element) {\n        var containerPosition = {},\n            // fall back to dropdown's default display setting if display is not manually set\n        display = that.options.display || ( // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default\n        $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display : false);\n        that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));\n        pos = $element.offset();\n\n        if (!$container.is('body')) {\n          containerPos = $container.offset();\n          containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\n          containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\n        } else {\n          containerPos = {\n            top: 0,\n            left: 0\n          };\n        }\n\n        actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; // Bootstrap 4+ uses Popper for menu positioning\n\n        if (version.major < 4 || display === 'static') {\n          containerPosition.top = pos.top - containerPos.top + actualHeight;\n          containerPosition.left = pos.left - containerPos.left;\n        }\n\n        containerPosition.width = $element[0].offsetWidth;\n        that.$bsContainer.css(containerPosition);\n      };\n\n      this.$button.on('click.bs.dropdown.data-api', function () {\n        if (that.isDisabled()) {\n          return;\n        }\n\n        getPlacement(that.$newElement);\n        that.$bsContainer.appendTo(that.options.container).toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)).append(that.$menu);\n      });\n      $(window).off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId).on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {\n        var isActive = that.$newElement.hasClass(classNames.SHOW);\n        if (isActive) getPlacement(that.$newElement);\n      });\n      this.$element.on('hide' + EVENT_KEY, function () {\n        that.$menu.data('height', that.$menu.height());\n        that.$bsContainer.detach();\n      });\n    },\n    setOptionStatus: function setOptionStatus(selectedOnly) {\n      var that = this;\n      that.noScroll = false;\n\n      if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {\n        for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {\n          var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],\n              option = liData.option;\n\n          if (option) {\n            if (selectedOnly !== true) {\n              that.setDisabled(liData.index, liData.disabled);\n            }\n\n            that.setSelected(liData.index, option.selected);\n          }\n        }\n      }\n    },\n\n    /**\r\n     * @param {number} index - the index of the option that is being changed\r\n     * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n     */\n    setSelected: function setSelected(index, selected) {\n      var li = this.selectpicker.main.elements[index],\n          liData = this.selectpicker.main.data[index],\n          activeIndexIsSet = this.activeIndex !== undefined,\n          thisIsActive = this.activeIndex === index,\n          prevActive,\n          a,\n          // if current option is already active\n      // OR\n      // if the current option is being selected, it's NOT multiple, and\n      // activeIndex is undefined:\n      //  - when the menu is first being opened, OR\n      //  - after a search has been performed, OR\n      //  - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex)\n      keepActive = thisIsActive || selected && !this.multiple && !activeIndexIsSet;\n      liData.selected = selected;\n      a = li.firstChild;\n\n      if (selected) {\n        this.selectedIndex = index;\n      }\n\n      li.classList.toggle('selected', selected);\n\n      if (keepActive) {\n        this.focusItem(li, liData);\n        this.selectpicker.view.currentActive = li;\n        this.activeIndex = index;\n      } else {\n        this.defocusItem(li);\n      }\n\n      if (a) {\n        a.classList.toggle('selected', selected);\n\n        if (selected) {\n          a.setAttribute('aria-selected', true);\n        } else {\n          if (this.multiple) {\n            a.setAttribute('aria-selected', false);\n          } else {\n            a.removeAttribute('aria-selected');\n          }\n        }\n      }\n\n      if (!keepActive && !activeIndexIsSet && selected && this.prevActiveIndex !== undefined) {\n        prevActive = this.selectpicker.main.elements[this.prevActiveIndex];\n        this.defocusItem(prevActive);\n      }\n    },\n\n    /**\r\n     * @param {number} index - the index of the option that is being disabled\r\n     * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n     */\n    setDisabled: function setDisabled(index, disabled) {\n      var li = this.selectpicker.main.elements[index],\n          a;\n      this.selectpicker.main.data[index].disabled = disabled;\n      a = li.firstChild;\n      li.classList.toggle(classNames.DISABLED, disabled);\n\n      if (a) {\n        if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled);\n\n        if (disabled) {\n          a.setAttribute('aria-disabled', disabled);\n          a.setAttribute('tabindex', -1);\n        } else {\n          a.removeAttribute('aria-disabled');\n          a.setAttribute('tabindex', 0);\n        }\n      }\n    },\n    isDisabled: function isDisabled() {\n      return this.$element[0].disabled;\n    },\n    checkDisabled: function checkDisabled() {\n      if (this.isDisabled()) {\n        this.$newElement[0].classList.add(classNames.DISABLED);\n        this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);\n      } else {\n        if (this.$button[0].classList.contains(classNames.DISABLED)) {\n          this.$newElement[0].classList.remove(classNames.DISABLED);\n          this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);\n        }\n      }\n    },\n    clickListener: function clickListener() {\n      var that = this,\n          $document = $(document);\n      $document.data('spaceSelect', false);\n      this.$button.on('keyup', function (e) {\n        if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n          e.preventDefault();\n          $document.data('spaceSelect', false);\n        }\n      });\n      this.$newElement.on('show.bs.dropdown', function () {\n        if (version.major > 3 && !that.dropdown) {\n          that.dropdown = that.$button.data('bs.dropdown');\n          that.dropdown._menu = that.$menu[0];\n        }\n      });\n      this.$button.on('click.bs.dropdown.data-api', function () {\n        if (!that.$newElement.hasClass(classNames.SHOW)) {\n          that.setSize();\n        }\n      });\n\n      function setFocus() {\n        if (that.options.liveSearch) {\n          that.$searchbox.trigger('focus');\n        } else {\n          that.$menuInner.trigger('focus');\n        }\n      }\n\n      function checkPopperExists() {\n        if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) {\n          setFocus();\n        } else {\n          requestAnimationFrame(checkPopperExists);\n        }\n      }\n\n      this.$element.on('shown' + EVENT_KEY, function () {\n        if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {\n          that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;\n        }\n\n        if (version.major > 3) {\n          requestAnimationFrame(checkPopperExists);\n        } else {\n          setFocus();\n        }\n      }); // ensure posinset and setsize are correct before selecting an option via a click\n\n      this.$menuInner.on('mouseenter', 'li a', function (e) {\n        var hoverLi = this.parentElement,\n            position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n            index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),\n            hoverData = that.selectpicker.current.data[index + position0];\n        that.focusItem(hoverLi, hoverData, true);\n      });\n      this.$menuInner.on('click', 'li a', function (e, retainActive) {\n        var $this = $(this),\n            element = that.$element[0],\n            position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n            clickedData = that.selectpicker.current.data[$this.parent().index() + position0],\n            clickedIndex = clickedData.index,\n            prevValue = getSelectValues(element),\n            prevIndex = element.selectedIndex,\n            prevOption = element.options[prevIndex],\n            triggerChange = true; // Don't close on multi choice menu\n\n        if (that.multiple && that.options.maxOptions !== 1) {\n          e.stopPropagation();\n        }\n\n        e.preventDefault(); // Don't run if the select is disabled\n\n        if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {\n          var option = clickedData.option,\n              $option = $(option),\n              state = option.selected,\n              $optgroup = $option.parent('optgroup'),\n              $optgroupOptions = $optgroup.find('option'),\n              maxOptions = that.options.maxOptions,\n              maxOptionsGrp = $optgroup.data('maxOptions') || false;\n          if (clickedIndex === that.activeIndex) retainActive = true;\n\n          if (!retainActive) {\n            that.prevActiveIndex = that.activeIndex;\n            that.activeIndex = undefined;\n          }\n\n          if (!that.multiple) {\n            // Deselect all others if not multi select box\n            if (prevOption) prevOption.selected = false;\n            option.selected = true;\n            that.setSelected(clickedIndex, true);\n          } else {\n            // Toggle the one we have chosen if we are multi select.\n            option.selected = !state;\n            that.setSelected(clickedIndex, !state);\n            $this.trigger('blur');\n\n            if (maxOptions !== false || maxOptionsGrp !== false) {\n              var maxReached = maxOptions < getSelectedOptions(element).length,\n                  maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n              if (maxOptions && maxReached || maxOptionsGrp && maxReachedGrp) {\n                if (maxOptions && maxOptions == 1) {\n                  element.selectedIndex = -1;\n                  option.selected = true;\n                  that.setOptionStatus(true);\n                } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n                  for (var i = 0; i < $optgroupOptions.length; i++) {\n                    var _option = $optgroupOptions[i];\n                    _option.selected = false;\n                    that.setSelected(_option.liIndex, false);\n                  }\n\n                  option.selected = true;\n                  that.setSelected(clickedIndex, true);\n                } else {\n                  var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\n                      maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\n                      maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\n                      maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\n                      $notify = $('<div class=\"notify\"></div>'); // If {var} is set in array, replace it\n\n                  /** @deprecated */\n\n                  if (maxOptionsArr[2]) {\n                    maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n                    maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n                  }\n\n                  option.selected = false;\n                  that.$menu.append($notify);\n\n                  if (maxOptions && maxReached) {\n                    $notify.append($('<div>' + maxTxt + '</div>'));\n                    triggerChange = false;\n                    that.$element.trigger('maxReached' + EVENT_KEY);\n                  }\n\n                  if (maxOptionsGrp && maxReachedGrp) {\n                    $notify.append($('<div>' + maxTxtGrp + '</div>'));\n                    triggerChange = false;\n                    that.$element.trigger('maxReachedGrp' + EVENT_KEY);\n                  }\n\n                  setTimeout(function () {\n                    that.setSelected(clickedIndex, false);\n                  }, 10);\n                  $notify[0].classList.add('fadeOut');\n                  setTimeout(function () {\n                    $notify.remove();\n                  }, 1050);\n                }\n              }\n            }\n          }\n\n          if (!that.multiple || that.multiple && that.options.maxOptions === 1) {\n            that.$button.trigger('focus');\n          } else if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n          } // Trigger select 'change'\n\n\n          if (triggerChange) {\n            if (that.multiple || prevIndex !== element.selectedIndex) {\n              // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.\n              changedArguments = [option.index, $option.prop('selected'), prevValue];\n              that.$element.triggerNative('change');\n            }\n          }\n        }\n      });\n      this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {\n        if (e.currentTarget == this) {\n          e.preventDefault();\n          e.stopPropagation();\n\n          if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n            that.$searchbox.trigger('focus');\n          } else {\n            that.$button.trigger('focus');\n          }\n        }\n      });\n      this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (that.options.liveSearch) {\n          that.$searchbox.trigger('focus');\n        } else {\n          that.$button.trigger('focus');\n        }\n      });\n      this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {\n        that.$button.trigger('click');\n      });\n      this.$searchbox.on('click', function (e) {\n        e.stopPropagation();\n      });\n      this.$menu.on('click', '.actions-btn', function (e) {\n        if (that.options.liveSearch) {\n          that.$searchbox.trigger('focus');\n        } else {\n          that.$button.trigger('focus');\n        }\n\n        e.preventDefault();\n        e.stopPropagation();\n\n        if ($(this).hasClass('bs-select-all')) {\n          that.selectAll();\n        } else {\n          that.deselectAll();\n        }\n      });\n      this.$button.on('focus' + EVENT_KEY, function (e) {\n        var tabindex = that.$element[0].getAttribute('tabindex'); // only change when button is actually focused\n\n        if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n          // apply select element's tabindex to ensure correct order is followed when tabbing to the next element\n          this.setAttribute('tabindex', tabindex); // set element's tabindex to -1 to allow for reverse tabbing\n\n          that.$element[0].setAttribute('tabindex', -1);\n          that.selectpicker.view.tabindex = tabindex;\n        }\n      }).on('blur' + EVENT_KEY, function (e) {\n        // revert everything to original tabindex\n        if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n          that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);\n          this.setAttribute('tabindex', -1);\n          that.selectpicker.view.tabindex = undefined;\n        }\n      });\n      this.$element.on('change' + EVENT_KEY, function () {\n        that.render();\n        that.$element.trigger('changed' + EVENT_KEY, changedArguments);\n        changedArguments = null;\n      }).on('focus' + EVENT_KEY, function () {\n        if (!that.options.mobile) that.$button.trigger('focus');\n      });\n    },\n    liveSearchListener: function liveSearchListener() {\n      var that = this;\n      this.$button.on('click.bs.dropdown.data-api', function () {\n        if (!!that.$searchbox.val()) {\n          that.$searchbox.val('');\n        }\n      });\n      this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {\n        e.stopPropagation();\n      });\n      this.$searchbox.on('input propertychange', function () {\n        var searchValue = that.$searchbox.val();\n        that.selectpicker.search.elements = [];\n        that.selectpicker.search.data = [];\n\n        if (searchValue) {\n          var i,\n              searchMatch = [],\n              q = searchValue.toUpperCase(),\n              cache = {},\n              cacheArr = [],\n              searchStyle = that._searchStyle(),\n              normalizeSearch = that.options.liveSearchNormalize;\n\n          if (normalizeSearch) q = normalizeToBase(q);\n\n          for (var i = 0; i < that.selectpicker.main.data.length; i++) {\n            var li = that.selectpicker.main.data[i];\n\n            if (!cache[i]) {\n              cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);\n            }\n\n            if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {\n              if (li.headerIndex > 0) {\n                cache[li.headerIndex - 1] = true;\n                cacheArr.push(li.headerIndex - 1);\n              }\n\n              cache[li.headerIndex] = true;\n              cacheArr.push(li.headerIndex);\n              cache[li.lastIndex + 1] = true;\n            }\n\n            if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);\n          }\n\n          for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {\n            var index = cacheArr[i],\n                prevIndex = cacheArr[i - 1],\n                li = that.selectpicker.main.data[index],\n                liPrev = that.selectpicker.main.data[prevIndex];\n\n            if (li.type !== 'divider' || li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i) {\n              that.selectpicker.search.data.push(li);\n              searchMatch.push(that.selectpicker.main.elements[index]);\n            }\n          }\n\n          that.activeIndex = undefined;\n          that.noScroll = true;\n          that.$menuInner.scrollTop(0);\n          that.selectpicker.search.elements = searchMatch;\n          that.createView(true);\n          showNoResults.call(that, searchMatch, searchValue);\n        } else {\n          that.$menuInner.scrollTop(0);\n          that.createView(false);\n        }\n      });\n    },\n    _searchStyle: function _searchStyle() {\n      return this.options.liveSearchStyle || 'contains';\n    },\n    val: function val(value) {\n      var element = this.$element[0];\n\n      if (typeof value !== 'undefined') {\n        var prevValue = getSelectValues(element);\n        changedArguments = [null, null, prevValue];\n        this.$element.val(value).trigger('changed' + EVENT_KEY, changedArguments);\n\n        if (this.$newElement.hasClass(classNames.SHOW)) {\n          if (this.multiple) {\n            this.setOptionStatus(true);\n          } else {\n            var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n            if (typeof liSelectedIndex === 'number') {\n              this.setSelected(this.selectedIndex, false);\n              this.setSelected(liSelectedIndex, true);\n            }\n          }\n        }\n\n        this.render();\n        changedArguments = null;\n        return this.$element;\n      } else {\n        return this.$element.val();\n      }\n    },\n    changeAll: function changeAll(status) {\n      if (!this.multiple) return;\n      if (typeof status === 'undefined') status = true;\n      var element = this.$element[0],\n          previousSelected = 0,\n          currentSelected = 0,\n          prevValue = getSelectValues(element);\n      element.classList.add('bs-select-hidden');\n\n      for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {\n        var liData = data[i],\n            option = liData.option;\n\n        if (option && !liData.disabled && liData.type !== 'divider') {\n          if (liData.selected) previousSelected++;\n          option.selected = status;\n          if (status === true) currentSelected++;\n        }\n      }\n\n      element.classList.remove('bs-select-hidden');\n      if (previousSelected === currentSelected) return;\n      this.setOptionStatus();\n      changedArguments = [null, null, prevValue];\n      this.$element.triggerNative('change');\n    },\n    selectAll: function selectAll() {\n      return this.changeAll(true);\n    },\n    deselectAll: function deselectAll() {\n      return this.changeAll(false);\n    },\n    toggle: function toggle(e) {\n      e = e || window.event;\n      if (e) e.stopPropagation();\n      this.$button.trigger('click.bs.dropdown.data-api');\n    },\n    keydown: function keydown(e) {\n      var $this = $(this),\n          isToggle = $this.hasClass('dropdown-toggle'),\n          $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),\n          that = $parent.data('this'),\n          $items = that.findLis(),\n          index,\n          isActive,\n          liActive,\n          activeLi,\n          offset,\n          updateScroll = false,\n          downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,\n          isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,\n          scrollTop = that.$menuInner[0].scrollTop,\n          isVirtual = that.isVirtual(),\n          position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; // do nothing if a function key is pressed\n\n      if (e.which >= 112 && e.which <= 123) return;\n      isActive = that.$newElement.hasClass(classNames.SHOW);\n\n      if (!isActive && (isArrowKey || e.which >= 48 && e.which <= 57 || e.which >= 96 && e.which <= 105 || e.which >= 65 && e.which <= 90)) {\n        that.$button.trigger('click.bs.dropdown.data-api');\n\n        if (that.options.liveSearch) {\n          that.$searchbox.trigger('focus');\n          return;\n        }\n      }\n\n      if (e.which === keyCodes.ESCAPE && isActive) {\n        e.preventDefault();\n        that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');\n      }\n\n      if (isArrowKey) {\n        // if up or down\n        if (!$items.length) return;\n        liActive = that.selectpicker.main.elements[that.activeIndex];\n        index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;\n\n        if (index !== -1) {\n          that.defocusItem(liActive);\n        }\n\n        if (e.which === keyCodes.ARROW_UP) {\n          // up\n          if (index !== -1) index--;\n          if (index + position0 < 0) index += $items.length;\n\n          if (!that.selectpicker.view.canHighlight[index + position0]) {\n            index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;\n            if (index === -1) index = $items.length - 1;\n          }\n        } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n          // down\n          index++;\n          if (index + position0 >= that.selectpicker.view.canHighlight.length) index = 0;\n\n          if (!that.selectpicker.view.canHighlight[index + position0]) {\n            index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);\n          }\n        }\n\n        e.preventDefault();\n        var liActiveIndex = position0 + index;\n\n        if (e.which === keyCodes.ARROW_UP) {\n          // up\n          // scroll to bottom and highlight last option\n          if (position0 === 0 && index === $items.length - 1) {\n            that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;\n            liActiveIndex = that.selectpicker.current.elements.length - 1;\n          } else {\n            activeLi = that.selectpicker.current.data[liActiveIndex];\n            offset = activeLi.position - activeLi.height;\n            updateScroll = offset < scrollTop;\n          }\n        } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n          // down\n          // scroll to top and highlight first option\n          if (index === 0) {\n            that.$menuInner[0].scrollTop = 0;\n            liActiveIndex = 0;\n          } else {\n            activeLi = that.selectpicker.current.data[liActiveIndex];\n            offset = activeLi.position - that.sizeInfo.menuInnerHeight;\n            updateScroll = offset > scrollTop;\n          }\n        }\n\n        liActive = that.selectpicker.current.elements[liActiveIndex];\n        that.activeIndex = that.selectpicker.current.data[liActiveIndex].index;\n        that.focusItem(liActive);\n        that.selectpicker.view.currentActive = liActive;\n        if (updateScroll) that.$menuInner[0].scrollTop = offset;\n\n        if (that.options.liveSearch) {\n          that.$searchbox.trigger('focus');\n        } else {\n          $this.trigger('focus');\n        }\n      } else if (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which) || e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) {\n        var searchMatch,\n            matches = [],\n            keyHistory;\n        e.preventDefault();\n        that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];\n        if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);\n        that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();\n        keyHistory = that.selectpicker.keydown.keyHistory; // if all letters are the same, set keyHistory to just the first character when searching\n\n        if (/^(.)\\1+$/.test(keyHistory)) {\n          keyHistory = keyHistory.charAt(0);\n        } // find matches\n\n\n        for (var i = 0; i < that.selectpicker.current.data.length; i++) {\n          var li = that.selectpicker.current.data[i],\n              hasMatch;\n          hasMatch = stringSearch(li, keyHistory, 'startsWith', true);\n\n          if (hasMatch && that.selectpicker.view.canHighlight[i]) {\n            matches.push(li.index);\n          }\n        }\n\n        if (matches.length) {\n          var matchIndex = 0;\n          $items.removeClass('active').find('a').removeClass('active'); // either only one key has been pressed or they are all the same key\n\n          if (keyHistory.length === 1) {\n            matchIndex = matches.indexOf(that.activeIndex);\n\n            if (matchIndex === -1 || matchIndex === matches.length - 1) {\n              matchIndex = 0;\n            } else {\n              matchIndex++;\n            }\n          }\n\n          searchMatch = matches[matchIndex];\n          activeLi = that.selectpicker.main.data[searchMatch];\n\n          if (scrollTop - activeLi.position > 0) {\n            offset = activeLi.position - activeLi.height;\n            updateScroll = true;\n          } else {\n            offset = activeLi.position - that.sizeInfo.menuInnerHeight; // if the option is already visible at the current scroll position, just keep it the same\n\n            updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;\n          }\n\n          liActive = that.selectpicker.main.elements[searchMatch];\n          that.activeIndex = matches[matchIndex];\n          that.focusItem(liActive);\n          if (liActive) liActive.firstChild.focus();\n          if (updateScroll) that.$menuInner[0].scrollTop = offset;\n          $this.trigger('focus');\n        }\n      } // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n\n\n      if (isActive && (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory || e.which === keyCodes.ENTER || e.which === keyCodes.TAB && that.options.selectOnTab)) {\n        if (e.which !== keyCodes.SPACE) e.preventDefault();\n\n        if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {\n          that.$menuInner.find('.active a').trigger('click', true); // retain active class\n\n          $this.trigger('focus');\n\n          if (!that.options.liveSearch) {\n            // Prevent screen from scrolling if the user hits the spacebar\n            e.preventDefault(); // Fixes spacebar selection of dropdown items in FF & IE\n\n            $(document).data('spaceSelect', true);\n          }\n        }\n      }\n    },\n    mobile: function mobile() {\n      // ensure mobile is set to true if mobile function is called after init\n      this.options.mobile = true;\n      this.$element[0].classList.add('mobile-device');\n    },\n    refresh: function refresh() {\n      // update options if data attributes have been changed\n      var config = $.extend({}, this.options, this.$element.data());\n      this.options = config;\n      this.checkDisabled();\n      this.buildData();\n      this.setStyle();\n      this.render();\n      this.buildList();\n      this.setWidth();\n      this.setSize(true);\n      this.$element.trigger('refreshed' + EVENT_KEY);\n    },\n    hide: function hide() {\n      this.$newElement.hide();\n    },\n    show: function show() {\n      this.$newElement.show();\n    },\n    remove: function remove() {\n      this.$newElement.remove();\n      this.$element.remove();\n    },\n    destroy: function destroy() {\n      this.$newElement.before(this.$element).remove();\n\n      if (this.$bsContainer) {\n        this.$bsContainer.remove();\n      } else {\n        this.$menu.remove();\n      }\n\n      this.$element.off(EVENT_KEY).removeData('selectpicker').removeClass('bs-select-hidden selectpicker');\n      $(window).off(EVENT_KEY + '.' + this.selectId);\n    }\n  }; // SELECTPICKER PLUGIN DEFINITION\n  // ==============================\n\n  function Plugin(option) {\n    // get the args of the outer function..\n    var args = arguments; // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n    // to get lost/corrupted in android 2.3 and IE9 #715 #775\n\n    var _option = option;\n    [].shift.apply(args); // if the version was not set successfully\n\n    if (!version.success) {\n      // try to retreive it again\n      try {\n        version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n      } catch (err) {\n        // fall back to use BootstrapVersion if set\n        if (Selectpicker.BootstrapVersion) {\n          version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');\n        } else {\n          version.full = [version.major, '0', '0'];\n          console.warn('There was an issue retrieving Bootstrap\\'s version. ' + 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', err);\n        }\n      }\n\n      version.major = version.full[0];\n      version.success = true;\n    }\n\n    if (version.major === '4') {\n      // some defaults need to be changed if using Bootstrap 4\n      // check to see if they have already been manually changed before forcing them to update\n      var toUpdate = [];\n      if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({\n        name: 'style',\n        className: 'BUTTONCLASS'\n      });\n      if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({\n        name: 'iconBase',\n        className: 'ICONBASE'\n      });\n      if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({\n        name: 'tickIcon',\n        className: 'TICKICON'\n      });\n      classNames.DIVIDER = 'dropdown-divider';\n      classNames.SHOW = 'show';\n      classNames.BUTTONCLASS = 'btn-light';\n      classNames.POPOVERHEADER = 'popover-header';\n      classNames.ICONBASE = '';\n      classNames.TICKICON = 'bs-ok-default';\n\n      for (var i = 0; i < toUpdate.length; i++) {\n        var option = toUpdate[i];\n        Selectpicker.DEFAULTS[option.name] = classNames[option.className];\n      }\n    }\n\n    var value;\n    var chain = this.each(function () {\n      var $this = $(this);\n\n      if ($this.is('select')) {\n        var data = $this.data('selectpicker'),\n            options = _typeof(_option) == 'object' && _option;\n\n        if (!data) {\n          var dataAttributes = $this.data();\n\n          for (var dataAttr in dataAttributes) {\n            if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n              delete dataAttributes[dataAttr];\n            }\n          }\n\n          var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, dataAttributes, options);\n          config.template = $.extend({}, Selectpicker.DEFAULTS.template, $.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}, dataAttributes.template, options.template);\n          $this.data('selectpicker', data = new Selectpicker(this, config));\n        } else if (options) {\n          for (var i in options) {\n            if (Object.prototype.hasOwnProperty.call(options, i)) {\n              data.options[i] = options[i];\n            }\n          }\n        }\n\n        if (typeof _option == 'string') {\n          if (data[_option] instanceof Function) {\n            value = data[_option].apply(data, args);\n          } else {\n            value = data.options[_option];\n          }\n        }\n      }\n    });\n\n    if (typeof value !== 'undefined') {\n      // noinspection JSUnusedAssignment\n      return value;\n    } else {\n      return chain;\n    }\n  }\n\n  var old = $.fn.selectpicker;\n  $.fn.selectpicker = Plugin;\n  $.fn.selectpicker.Constructor = Selectpicker; // SELECTPICKER NO CONFLICT\n  // ========================\n\n  $.fn.selectpicker.noConflict = function () {\n    $.fn.selectpicker = old;\n    return this;\n  }; // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3\n\n\n  function keydownHandler() {\n    if ($.fn.dropdown) {\n      // wait to define until function is called in case Bootstrap isn't loaded yet\n      var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;\n      return bootstrapKeydown.apply(this, arguments);\n    }\n  }\n\n  $(document).off('keydown.bs.dropdown.data-api').on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [data-toggle=\"dropdown\"]', keydownHandler).on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler).on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown).on('focusin.modal', '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', function (e) {\n    e.stopPropagation();\n  }); // SELECTPICKER DATA-API\n  // =====================\n\n  $(window).on('load' + EVENT_KEY + '.data-api', function () {\n    $('.selectpicker').each(function () {\n      var $selectpicker = $(this);\n      Plugin.call($selectpicker, $selectpicker.data());\n    });\n  });\n})(jQuery);"],"sourceRoot":""}