PageSourceSearch

https://www.baobab-books.net/sites/default/files/js/js_REYqNJADjnp9gxCse4iPpVl0LsZaZV6Eg5gRJLX5Rp8.js

js baobab-books.net collected 2026-09-24 23:54:41 UTC 481,158 bytes, 9,580 lines download raw bytes

vendor: 89,476 bytes, lines 1-2
1/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
3;
4//     Underscore.js 1.9.1
5//     http://underscorejs.org
6//     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
7//     Underscore may be freely distributed under the MIT license.
8!function(){var n="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this||{},r=n._,e=Array.prototype,o=Object.prototype,s="undefined"!=typeof Symbol?Symbol.prototype:null,u=e.push,c=e.slice,p=o.toString,i=o.hasOwnProperty,t=Array.isArray,a=Object.keys,l=Object.create,f=function(){},h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"==typeof exports||exports.nodeType?n._=h:("undefined"!=typeof module&&!module.nodeType&&module.exports&&(exports=module.exports=h),exports._=h),h.VERSION="1.9.1";var v,y=function(u,i,n){if(void 0===i)return u;switch(null==n?3:n){case 1:return function(n){return u.call(i,n)};case 3:return function(n,r,t){return u.call(i,n,r,t)};case 4:return function(n,r,t,e){return u.call(i,n,r,t,e)}}return function(){return u.apply(i,arguments)}},d=function(n,r,t){return h.iteratee!==v?h.iteratee(n,r):null==n?h.identity:h.isFunction(n)?y(n,r,t):h.isObject(n)&&!h.isArray(n)?h.matcher(n):h.property(n)};h.iteratee=v=function(n,r){return d(n,r,1/0)};var g=function(u,i){return i=null==i?u.length-1:+i,function(){for(var n=Math.max(arguments.length-i,0),r=Array(n),t=0;t<n;t++)r[t]=arguments[t+i];switch(i){case 0:return u.call(this,r);case 1:return u.call(this,arguments[0],r);case 2:return u.call(this,arguments[0],arguments[1],r)}var e=Array(i+1);for(t=0;t<i;t++)e[t]=arguments[t];return e[i]=r,u.apply(this,e)}},m=function(n){if(!h.isObject(n))return{};if(l)return l(n);f.prototype=n;var r=new f;return f.prototype=null,r},b=function(r){return function(n){return null==n?void 0:n[r]}},j=function(n,r){return null!=n&&i.call(n,r)},x=function(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0},_=Math.pow(2,53)-1,A=b("length"),w=function(n){var r=A(n);return"number"==typeof r&&0<=r&&r<=_};h.each=h.forEach=function(n,r,t){var e,u;if(r=y(r,t),w(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;e<u;e++)r(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=Array(u),o=0;o<u;o++){var a=e?e[o]:o;i[o]=r(n[a],a,n)}return i};var O=function(c){return function(n,r,t,e){var u=3<=arguments.length;return function(n,r,t,e){var u=!w(n)&&h.keys(n),i=(u||n).length,o=0<c?0:i-1;for(e||(t=n[u?u[o]:o],o+=c);0<=o&&o<i;o+=c){var a=u?u[o]:o;t=r(t,n[a],a,n)}return t}(n,y(r,e,4),t,u)}};h.reduce=h.foldl=h.inject=O(1),h.reduceRight=h.foldr=O(-1),h.find=h.detect=function(n,r,t){var e=(w(n)?h.findIndex:h.findKey)(n,r,t);if(void 0!==e&&-1!==e)return n[e]},h.filter=h.select=function(n,e,r){var u=[];return e=d(e,r),h.each(n,function(n,r,t){e(n,r,t)&&u.push(n)}),u},h.reject=function(n,r,t){return h.filter(n,h.negate(d(r)),t)},h.every=h.all=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(!r(n[o],o,n))return!1}return!0},h.some=h.any=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(r(n[o],o,n))return!0}return!1},h.contains=h.includes=h.include=function(n,r,t,e){return w(n)||(n=h.values(n)),("number"!=typeof t||e)&&(t=0),0<=h.indexOf(n,r,t)},h.invoke=g(function(n,t,e){var u,i;return h.isFunction(t)?i=t:h.isArray(t)&&(u=t.slice(0,-1),t=t[t.length-1]),h.map(n,function(n){var r=i;if(!r){if(u&&u.length&&(n=x(n,u)),null==n)return;r=n[t]}return null==r?r:r.apply(n,e)})}),h.pluck=function(n,r){return h.map(n,h.property(r))},h.where=function(n,r){return h.filter(n,h.matcher(r))},h.findWhere=function(n,r){return h.find(n,h.matcher(r))},h.max=function(n,e,r){var t,u,i=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&i<t&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){u=e(n,r,t),(o<u||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},h.min=function(n,e,r){var t,u,i=1/0,o=1/0;
8if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&t<i&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){((u=e(n,r,t))<o||u===1/0&&i===1/0)&&(i=n,o=u)});return i},h.shuffle=function(n){return h.sample(n,1/0)},h.sample=function(n,r,t){if(null==r||t)return w(n)||(n=h.values(n)),n[h.random(n.length-1)];var e=w(n)?h.clone(n):h.values(n),u=A(e);r=Math.max(Math.min(r,u),0);for(var i=u-1,o=0;o<r;o++){var a=h.random(o,i),c=e[o];e[o]=e[a],e[a]=c}return e.slice(0,r)},h.sortBy=function(n,e,r){var u=0;return e=d(e,r),h.pluck(h.map(n,function(n,r,t){return{value:n,index:u++,criteria:e(n,r,t)}}).sort(function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(e<t||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index}),"value")};var k=function(o,r){return function(e,u,n){var i=r?[[],[]]:{};return u=d(u,n),h.each(e,function(n,r){var t=u(n,r,e);o(i,n,t)}),i}};h.groupBy=k(function(n,r,t){j(n,t)?n[t].push(r):n[t]=[r]}),h.indexBy=k(function(n,r,t){n[t]=r}),h.countBy=k(function(n,r,t){j(n,t)?n[t]++:n[t]=1});var S=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;h.toArray=function(n){return n?h.isArray(n)?c.call(n):h.isString(n)?n.match(S):w(n)?h.map(n,h.identity):h.values(n):[]},h.size=function(n){return null==n?0:w(n)?n.length:h.keys(n).length},h.partition=k(function(n,r,t){n[t?0:1].push(r)},!0),h.first=h.head=h.take=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[0]:h.initial(n,n.length-r)},h.initial=function(n,r,t){return c.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))},h.last=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[n.length-1]:h.rest(n,Math.max(0,n.length-r))},h.rest=h.tail=h.drop=function(n,r,t){return c.call(n,null==r||t?1:r)},h.compact=function(n){return h.filter(n,Boolean)};var M=function(n,r,t,e){for(var u=(e=e||[]).length,i=0,o=A(n);i<o;i++){var a=n[i];if(w(a)&&(h.isArray(a)||h.isArguments(a)))if(r)for(var c=0,l=a.length;c<l;
8)e[u++]=a[c++];else M(a,r,t,e),u=e.length;else t||(e[u++]=a)}return e};h.flatten=function(n,r){return M(n,r,!1)},h.without=g(function(n,r){return h.difference(n,r)}),h.uniq=h.unique=function(n,r,t,e){h.isBoolean(r)||(e=t,t=r,r=!1),null!=t&&(t=d(t,e));for(var u=[],i=[],o=0,a=A(n);o<a;o++){var c=n[o],l=t?t(c,o,n):c;r&&!t?(o&&i===l||u.push(c),i=l):t?h.contains(i,l)||(i.push(l),u.push(c)):h.contains(u,c)||u.push(c)}return u},h.union=g(function(n){return h.uniq(M(n,!0,!0))}),h.intersection=function(n){for(var r=[],t=arguments.length,e=0,u=A(n);e<u;e++){var i=n[e];if(!h.contains(r,i)){var o;for(o=1;o<t&&h.contains(arguments[o],i);o++);o===t&&r.push(i)}}return r},h.difference=g(function(n,r){return r=M(r,!0,!0),h.filter(n,function(n){return!h.contains(r,n)})}),h.unzip=function(n){for(var r=n&&h.max(n,A).length||0,t=Array(r),e=0;e<r;e++)t[e]=h.pluck(n,e);return t},h.zip=g(h.unzip),h.object=function(n,r){for(var t={},e=0,u=A(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t};var F=function(i){return function(n,r,t){r=d(r,t);for(var e=A(n),u=0<i?0:e-1;0<=u&&u<e;u+=i)if(r(n[u],u,n))return u;return-1}};h.findIndex=F(1),h.findLastIndex=F(-1),h.sortedIndex=function(n,r,t,e){for(var u=(t=d(t,e,1))(r),i=0,o=A(n);i<o;){var a=Math.floor((i+o)/2);t(n[a])<u?i=a+1:o=a}return i};var E=function(i,o,a){return function(n,r,t){var e=0,u=A(n);if("number"==typeof t)0<i?e=0<=t?t:Math.max(t+u,e):u=0<=t?Math.min(t+1,u):t+u+1;else if(a&&t&&u)return n[t=a(n,r)]===r?t:-1;if(r!=r)return 0<=(t=o(c.call(n,e,u),h.isNaN))?t+e:-1;for(t=0<i?e:u-1;0<=t&&t<u;t+=i)if(n[t]===r)return t;return-1}};h.indexOf=E(1,h.findIndex,h.sortedIndex),h.lastIndexOf=E(-1,h.findLastIndex),h.range=function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),i=0;i<e;i++,n+=t)u[i]=n;return u},h.chunk=function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(c.call(n,e,e+=r));return t};var N=function(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var i=m(n.prototype),o=n.apply(i,u);return h.isObject(o)?o:i};h.bind=g(function(r,t,e){if(!h.isFunction(r))throw new TypeError("Bind must be called on a function");var u=g(function(n){return N(r,u,t,this,e.concat(n))});return u}),h.partial=g(function(u,i){var o=h.partial.placeholder,a=function(){for(var n=0,r=i.length,t=Array(r),e=0;e<r;e++)t[e]=i[e]===o?arguments[n++]:i[e];for(;n<arguments.length;)t.push(arguments[n++]);return N(u,a,this,this,t)};return a}),(h.partial.placeholder=h).bindAll=g(function(n,r){var t=(r=M(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=h.bind(n[e],n)}}),h.memoize=function(e,u){var i=function(n){var r=i.cache,t=""+(u?u.apply(this,arguments):n);return j(r,t)||(r[t]=e.apply(this,arguments)),r[t]};return i.cache={},i},h.delay=g(function(n,r,t){return setTimeout(function(){return n.apply(null,t)},r)}),h.defer=h.partial(h.delay,h,1),h.throttle=function(t,e,u){var i,o,a,c,l=0;u||(u={});var f=function(){l=!1===u.leading?0:h.now(),i=null,c=t.apply(o,a),i||(o=a=null)},n=function(){var n=h.now();l||!1!==u.leading||(l=n);var r=e-(n-l);return o=this,a=arguments,r<=0||e<r?(i&&(clearTimeout(i),i=null),l=n,c=t.apply(o,a),i||(o=a=null)):i||!1===u.trailing||(i=setTimeout(f,r)),c};return n.cancel=function(){clearTimeout(i),l=0,i=o=a=null},n},h.debounce=function(t,e,u){var i,o,a=function(n,r){i=null,r&&(o=t.apply(n,r))},n=g(function(n){if(i&&clearTimeout(i),u){var r=!i;i=setTimeout(a,e),r&&(o=t.apply(this,n))}else i=h.delay(a,e,this,n);return o});return n.cancel=function(){clearTimeout(i),i=null},n},h.wrap=function(n,r){return h.partial(r,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},h.before=function(n,r){var t;return function(){return 0<--n&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}},h.once=h.partial(h.before,2),h.restArguments=g;var I=!{toString:null}.propertyIsEnumerable("toString"),T=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleStr
8ing"],B=function(n,r){var t=T.length,e=n.constructor,u=h.isFunction(e)&&e.prototype||o,i="constructor";for(j(n,i)&&!h.contains(r,i)&&r.push(i);t--;)(i=T[t])in n&&n[i]!==u[i]&&!h.contains(r,i)&&r.push(i)};h.keys=function(n){if(!h.isObject(n))return[];if(a)return a(n);var r=[];for(var t in n)j(n,t)&&r.push(t);return I&&B(n,r),r},h.allKeys=function(n){if(!h.isObject(n))return[];var r=[];for(var t in n)r.push(t);return I&&B(n,r),r},h.values=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e},h.mapObject=function(n,r,t){r=d(r,t);for(var e=h.keys(n),u=e.length,i={},o=0;o<u;o++){var a=e[o];i[a]=r(n[a],a,n)}return i},h.pairs=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},h.invert=function(n){for(var r={},t=h.keys(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r},h.functions=h.methods=function(n){var r=[];for(var t in n)h.isFunction(n[t])&&r.push(t);return r.sort()};var R=function(c,l){return function(n){var r=arguments.length;if(l&&(n=Object(n)),r<2||null==n)return n;for(var t=1;t<r;t++)for(var e=arguments[t],u=c(e),i=u.length,o=0;o<i;o++){var a=u[o];l&&void 0!==n[a]||(n[a]=e[a])}return n}};h.extend=R(h.allKeys),h.extendOwn=h.assign=R(h.keys),h.findKey=function(n,r,t){r=d(r,t);for(var e,u=h.keys(n),i=0,o=u.length;i<o;i++)if(r(n[e=u[i]],e,n))return e};var q,K,z=function(n,r,t){return r in t};h.pick=g(function(n,r){var t={},e=r[0];if(null==n)return t;h.isFunction(e)?(1<r.length&&(e=y(e,r[1])),r=h.allKeys(n)):(e=z,r=M(r,!1,!1),n=Object(n));for(var u=0,i=r.length;u<i;u++){var o=r[u],a=n[o];e(a,o,n)&&(t[o]=a)}return t}),h.omit=g(function(n,t){var r,e=t[0];return h.isFunction(e)?(e=h.negate(e),1<t.length&&(r=t[1])):(t=h.map(M(t,!1,!1),String),e=function(n,r){return!h.contains(t,r)}),h.pick(n,e,r)}),h.defaults=R(h.allKeys,!0),h.create=function(n,r){var t=m(n);return r&&h.extendOwn(t,r),t},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,r){return r(n),n},h.isMatch=function(n,r){var t=h.keys(r),e=t.length;if(null==n)return!e;for(var u=Object(n),i=0;i<e;i++){var o=t[i];if(r[o]!==u[o]||!(o in u))return!1}return!0},q=function(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var u=typeof n;return("function"===u||"object"===u||"object"==typeof r)&&K(n,r,t,e)},K=function(n,r,t,e){n instanceof h&&(n=n._wrapped),r instanceof h&&(r=r._wrapped);var u=p.call(n);if(u!==p.call(r))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+r;case"[object Number]":return+n!=+n?+r!=+r:0==+n?1/+n==1/r:+n==+r;case"[object Date]":case"[object Boolean]":return+n==+r;case"[object Symbol]":return s.valueOf.call(n)===s.valueOf.call(r)}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof r)return!1;var o=n.constructor,a=r.constructor;if(o!==a&&!(h.isFunction(o)&&o instanceof o&&h.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in r)return!1}e=e||[];for(var c=(t=t||[]).length;c--;)if(t[c]===n)return e[c]===r;if(t.push(n),e.push(r),i){if((c=n.length)!==r.length)return!1;for(;c--;)if(!q(n[c],r[c],t,e))return!1}else{var l,f=h.keys(n);if(c=f.length,h.keys(r).length!==c)return!1;for(;c--;)if(l=f[c],!j(r,l)||!q(n[l],r[l],t,e))return!1}return t.pop(),e.pop(),!0},h.isEqual=function(n,r){return q(n,r)},h.isEmpty=function(n){return null==n||(w(n)&&(h.isArray(n)||h.isString(n)||h.isArguments(n))?0===n.length:0===h.keys(n).length)},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=t||function(n){return"[object Array]"===p.call(n)},h.isObject=function(n){var r=typeof n;return"function"===r||"object"===r&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp","Error","Symbol","Map","WeakMap","Set","WeakSet"],function(r){h["is"+r]=function(n){return p.call(n)==="[object "+r+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return j(n,"callee")});var D=n.document&&n.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof D&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return!h.isSymbol(n)&&isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&isNaN(n)},h.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===p.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return void 0===n},h.has=function(n,r){if(!h.isArray(r))return j(n,r);for(var t=r.length,e=0;e<t;e++){var u=r[e];if(null==n||!i.call(n,u))return!1;n=n[u]}return!!t},h.noConflict=function(){return n._=r,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(r){return h.isArray(r)?function(n){return x(n,r)}:b(r)},h.propertyOf=function(r){return null==r?function(){}:function(n){return h.isArray(n)?x(r,n):r[n]}},h.matcher=h.matches=function(r){return r=h.extendOwn({},r),function(n){return h.isMatch(n,r)}},h.times=function(n,r,t){var e=Array(Math.max(0,n));r=y(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},h.random=function(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var L={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},P=h.invert(L),W=function(r){var t=function(n){return r[n]},n="(?:"+h.keys(r).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u<e;u++){var i=null==n?void 0:n[r[u]];void 0===i&&(i=t,u=e),n=h.isFunction(i)?i.call(n):i}return n};
8var C=0;h.uniqueId=function(n){var r=++C+"";return n?n+r:r},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g,$=function(n){return"\\"+U[n]};h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var u=function(n){return t.call(this,n,h)},c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};var G=function(n,r){return n._chain?h(r).chain():r};h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}();;
9/**
10* DO NOT EDIT THIS FILE.
11* See the following change record for more information,
12* https://www.drupal.org/node/2815083
13* @preserve
14**/
15
16if (typeof Object.assign !== 'function') {
17  Object.defineProperty(Object, 'assign', {
18    value: function assign(target, varArgs) {
19      'use strict';
20
21      if (target === null || target === undefined) {
22        throw new TypeError('Cannot convert undefined or null to object');
23      }
24
25      var to = Object(target);
26
27      for (var index = 1; index < arguments.length; index++) {
28        var nextSource = arguments[index];
29
30        if (nextSource !== null && nextSource !== undefined) {
31          for (var nextKey in nextSource) {
32            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
33              to[nextKey] = nextSource[nextKey];
34            }
35          }
36        }
37      }
38      return to;
39    },
40    writable: true,
41    configurable: true
42  });
43};
44/*!
45 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once
46 * @license MIT, GPL-2.0
47 *   http://opensource.org/licenses/MIT
48 *   http://opensource.org/licenses/GPL-2.0
49 */
50(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}});
51
52(function(t){var e=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)})}else if(typeof exports!=="undefined"){var i=require("underscore"),n;try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}}
vendor: 27,391 bytes, lines 52-70
52)(function(t,e,i,n){var r=t.Backbone;var s=Array.prototype.slice;e.VERSION="1.4.0";e.$=n;e.noConflict=function(){t.Backbone=r;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=e.Events={};var o=/\s+/;var h;var u=function(t,e,n,r,s){var a=0,h;if(n&&typeof n==="object"){if(r!==void 0&&"context"in s&&s.context===void 0)s.context=r;for(h=i.keys(n);a<h.length;a++){e=u(t,e,h[a],n[h[a]],s)}}else if(n&&o.test(n)){for(h=n.split(o);a<h.length;a++){e=t(e,h[a],r,s)}}else{e=t(e,n,r,s)}return e};a.on=function(t,e,i){this._events=u(l,this._events||{},t,e,{context:i,ctx:this,listening:h});if(h){var n=this._listeners||(this._listeners={});n[h.id]=h;h.interop=false}return this};a.listenTo=function(t,e,n){if(!t)return this;var r=t._listenId||(t._listenId=i.uniqueId("l"));var s=this._listeningTo||(this._listeningTo={});var a=h=s[r];if(!a){this._listenId||(this._listenId=i.uniqueId("l"));a=h=s[r]=new g(this,t)}var o=c(t,e,n,this);h=void 0;if(o)throw o;if(a.interop)a.on(e,n);return this};var l=function(t,e,i,n){if(i){var r=t[e]||(t[e]=[]);var s=n.context,a=n.ctx,o=n.listening;if(o)o.count++;r.push({callback:i,context:s,ctx:s||a,listening:o})}return t};var c=function(t,e,i,n){try{t.on(e,i,n)}catch(r){return r}};a.off=function(t,e,i){if(!this._events)return this;this._events=u(f,this._events,t,e,{context:i,listeners:this._listeners});return this};a.stopListening=function(t,e,n){var r=this._listeningTo;if(!r)return this;var s=t?[t._listenId]:i.keys(r);for(var a=0;a<s.length;a++){var o=r[s[a]];if(!o)break;o.obj.off(e,n,this);if(o.interop)o.off(e,n)}if(i.isEmpty(r))this._listeningTo=void 0;return this};var f=function(t,e,n,r){if(!t)return;var s=r.context,a=r.listeners;var o=0,h;if(!e&&!s&&!n){for(h=i.keys(a);o<h.length;o++){a[h[o]].cleanup()}return}h=e?[e]:i.keys(t);for(;o<h.length;o++){e=h[o];var u=t[e];if(!u)break;var l=[];for(var c=0;c<u.length;c++){var f=u[c];if(n&&n!==f.callback&&n!==f.callback._callback||s&&s!==f.context){l.push(f)}else{var d=f.listening;if(d)d.off(e,n)}}if(l.length){t[e]=l}else{delete t[e]}}return t};a.once=function(t,e,i){var n=u(d,{},t,e,this.off.bind(this));if(typeof t==="string"&&i==null)e=void 0;return this.on(n,e,i)};a.listenToOnce=function(t,e,i){var n=u(d,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,n)};var d=function(t,e,n,r){if(n){var s=t[e]=i.once(function(){r(e,s);n.apply(this,arguments)});s._callback=n}return t};a.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var n=0;n<e;n++)i[n]=arguments[n+1];u(v,this._events,t,void 0,i);return this};var v=function(t,e,i,n){if(t){var r=t[e];var s=t.all;if(r&&s)s=s.slice();if(r)p(r,n);if(s)p(s,[e].concat(n))}return t};var p=function(t,e){var i,n=-1,r=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++n<r)(i=t[n]).callback.call(i.ctx);return;case 1:while(++n<r)(i=t[n]).callback.call(i.ctx,s);return;case 2:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a);return;case 3:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a,o);return;default:while(++n<r)(i=t[n]).callback.apply(i.ctx,e);return}};var g=function(t,e){this.id=t._listenId;this.listener=t;this.obj=e;this.interop=true;this.count=0;this._events=void 0};g.prototype.on=a.on;g.prototype.off=function(t,e){var i;if(this.interop){this._events=u(f,this._events,t,e,{context:void 0,listeners:void 0});i=!this._events}else{this.count--;i=this.count===0}if(i)this.cleanup()};g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId];if(!this.interop)delete this.obj._listeners[this.id]};a.bind=a.on;a.unbind=a.off;i.extend(e,a);var m=e.Model=function(t,e){var n=t||{};e||(e={});this.preinitialize.apply(this,arguments);this.cid=i.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)n=this.parse(n,e)||{};var r=i.result(this,"defaults");n=i.defaults(i.extend({},r,n),r);this.set(n,e);this.changed={};this.initialize.apply(this,arguments)};i.extend(m.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,n){if(t==null)return this;var r;if(typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n||(n={});if(!this._validate(r,n))return false;var s=n.unset;var a=n.silent;var o=[];var h=this._changing;this._changing=true;if(!h){this._previousAttributes=i.clone(this.attributes);this.changed={}}var u=this.attributes;var l=this.changed;var c=this._previousAttributes;for(var f in r){e=r[f];if(!i.isEqual(u[f],e))o.push(f);if(!i.isEqual(c[f],e)){l[f]=e}else{delete l[f]}s?delete u[f]:u[f]=e}if(this.idAttribute in r)this.id=this.get(this.idAttribute);if(!a){if(o.length)this._pending=n;for(var d=0;d<o.length;d++){this.trigger("change:"+o[d],this,u[o[d]],n)}}if(h)return this;if(!a){while(this._pending){n=this._pending;this._pending=false;this.trigger("change",this,n)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,i.extend({},e,{unset:true}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,i.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!i.isEmpty(this.changed);return i.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?i.clone(this.changed):false;var e=this._changing?this._previousAttributes:this.attributes;var n={};var r;for(var s in t){var a=t[s];if(i.isEqual(e[s],a))continue;n[s]=a;r=true}return r?n:false},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return i.clone(this._previousAttributes)},fetch:function(t){t=i.extend({parse:true},t);var e=this;var n=t.success;t.success=function(i){var r=t.parse?e.parse(i,t):i;if(!e.set(r,t))return false;if(n)n.call(t.context,e,i,t);e.trigger("sync",e,i,t)};G(this,t);return this.sync("read",this,t)},save:function(t,e,n){var r;if(t==null||typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n=i.extend({validate:true,parse:true},n);var s=n.wait;if(r&&!s){if(!this.set(r,n))return false}else if(!this._validate(r,n)){return false}var a=this;var o=n.success;var h=this.attributes;n.success=function(t){a.attributes=h;var e=n.parse?a.parse(t,n):t;if(s)e=i.extend({},r,e);if(e&&!a.set(e,n))return false;if(o)o.call(n.context,a,t,n);a.trigger("sync",a,t,n)};G(this,n);if(r&&s)this.attributes=i.extend({},h,r);var u=this.isNew()?"create":n.patch?"patch":"update";if(u==="patch"&&!n.attrs)n.attrs=r;var l=this.sync(u,this,n);this.attributes=h;return l},destroy:function(t){t=t?i.clone(t):{};var e=this;var n=t.success;var r=t.wait;var s=function(){e.stopListening();e.trigger("destroy",e,e.collection,t)};t.success=function(i){if(r)s();if(n)n.call(t.context,e,i,t);if(!e.isNew())e.trigger("sync",e,i,t)};var a=false;if(this.isNew()){i.defer(t.success)}else{G(this,t);a=this.sync("delete",this,t)}if(!r)s();return a},url:function(){var t=i.result(this,"urlRoot")||i.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},i.extend({},t,{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=i.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;if(!n)return true;this.trigger("invalid",this,n,i.extend(e,{validationError:n}));return false}});var _=e.Collection=function(t,e){e||(e={});this.preinitialize.apply(this,arguments);if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,i.extend({silent:true},e))};var y={add:true,remove:true,merge:true};var b={add:true,remove:false};var x=function(t,e,i){i=Math.min(Math.max(i,0),t.length);var n=Array(t.length-i);var r=e.length;var s;for(s=0;s<n.length;s++)n[s]=t[s+i];for(s=0;s<r;s++)t[s+i]=e[s];for(s=0;s<n.length;s++)t[s+r+i]=n[s]};i.extend(_.prototype,a,{model:m,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,i.extend({merge:false},e,b))},remove:function(t,e){e=i.extend({},e);var n=!i.isArray(t);t=n?[t]:t.slice();var r=this._removeModels(t,e);if(!e.silent&&r.length){e.changes={added:[],merged:[],removed:r};this.trigger("update",this,e)}return n?r[0]:r},set:function(t,e){if(t==null)return;e=i.extend({},y,e);if(e.parse&&!this._isModel(t)){t=this.parse(t,e)||[]}var n=!i.isArray(t);t=n?[t]:t.slice();var r=e.at;if(r!=null)r=+r;if(r>this.length)r=this.length;if(r<0)r+=this.length+1;var s=[];var a=[];var o=[];var h=[];var u={};var l=e.add;var c=e.merge;var f=e.remove;var d=false;var v=this.comparator&&r==null&&e.sort!==false;var p=i.isString(this.comparator)?this.comparator:null;var g,m;for(m=0;m<t.length;m++){g=t[m];var _=this.get(g);if(_){if(c&&g!==_){var b=this._isModel(g)?g.attributes:g;if(e.parse)b=_.parse(b,e);_.set(b,e);o.push(_);if(v&&!d)d=_.hasChanged(p)}if(!u[_.cid]){u[_.cid]=true;s.push(_)}t[m]=_}else if(l){g=t[m]=this._prepareModel(g,e);if(g){a.push(g);this._addReference(g,e);u[g.cid]=true;s.push(g)}}}if(f){for(m=0;m<this.length;m++){g=this.models[m];if(!u[g.cid])h.push(g)}if(h.length)this._removeModels(h,e)}var w=false;var E=!v&&l&&f;if(s.length&&E){w=this.length!==s.length||i.some(this.models,function(t,e){return t!==s[e]});this.models.length=0;x(this.models,s,0);this.length=this.models.length}else if(a.length){if(v)d=true;x(this.models,a,r==null?this.length:r);this.length=this.models.length}if(d)this.sort({silent:true});if(!e.silent){for(m=0;m<a.length;m++){if(r!=null)e.index=r+m;g=a[m];g.trigger("add",g,this,e)}if(d||w)this.trigger("sort",this,e);if(a.length||h.length||o.length){e.changes={added:a,removed:h,merged:o};this.trigger("update",this,e)}}return n?t[0]:t},reset:function(t,e){e=e?i.clone(e):{};for(var n=0;n<this.models.length;n++){this._removeReference(this.models[n],e)}e.previousModels=this.models;this._reset();t=this.add(t,i.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return t},push:function(t,e){return this.add(t,i.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,i.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(t==null)return void 0;return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t)]||t.cid&&this._byId[t.cid]},has:function(t){return this.get(t)!=null},at:function(t){if(t<0)t+=this.length;return this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,true)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var n=e.length;if(i.isFunction(e))e=e.bind(this);if(n===1||i.isString(e)){this.models=this.sortBy(e)}else{this.models.sort(e)}if(!t.silent)this.trigger("sort",this,t);return this},pluck:function(t){return this.map(t+"")},fetch:function(t){t=i.extend({parse:true},t);var e=t.success;var n=this;t.success=function(i){var r=t.reset?"reset":"set";n[r](i,t);if(e)e.call(t.context,n,i,t);n.trigger("sync",n,i,t)};G(this,t);return this.sync("read",this,t)},create:function(t,e){e=e?i.clone(e):{};var n=e.wait;t=this._prepareModel(t,e);if(!t)return false;if(!n)this.add(t,e);var r=this;var s=e.success;e.success=function(t,e,i){if(n)r.add(t,i);if(s)s.call(i.context,t,e,i)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},values:function(){return new E(this,k)},keys:function(){return new E(this,I)},entries:function(){return new E(this,S)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(this._isModel(t)){if(!t.collection)t.collection=this;return t}e=e?i.clone(e):{};e.collection=this;var n=new this.model(t,e);if(!n.validationError)return n;this.trigger("invalid",this,n.validationError,e);return false},_removeModels:function(t,e){var i=[];for(var n=0;n<t.length;n++){var r=this.get(t[n]);if(!r)continue;var s=this.indexOf(r);this.models.splice(s,1);this.length--;delete this._byId[r.cid];var a=this.modelId(r.attributes);if(a!=null)delete this._byId[a];if(!e.silent){e.index=s;r.trigger("remove",r,this,e)}i.push(r);this._removeReference(r,e)}return i},_isModel:function(t){return t instanceof m},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes);if(i!=null)this._byId[i]=t;t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes);if(i!=null)delete this._byId[i];if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){if(e){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,n);if(t==="change"){var r=this.modelId(e.previousAttributes());var s=this.modelId(e.attributes);if(r!==s){if(r!=null)delete this._byId[r];if(s!=null)this._byId[s]=e}}}this.trigger.apply(this,arguments)}});var w=typeof Symbol==="function"&&Symbol.iterator;if(w){_.prototype[w]=_.prototype.values}var E=function(t,e){this._collection=t;this._kind=e;this._index=0};var k=1;var I=2;var S=3;if(w){E.prototype[w]=function(){return this}}E.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t=this._collection.at(this._index);this._index++;var e;if(this._kind===k){e=t}else{var i=this._collection.modelId(t.attributes);if(this._kind===I){e=i}else{e=[i,t]}}return{value:e,done:false}}this._collection=void 0}return{value:void 0,done:true}};var T=e.View=function(t){this.cid=i.uniqueId("view");this.preinitialize.apply(this,arguments);i.extend(this,i.pick(t,H));this._ensureElement();this.initialize.apply(this,arguments)};var P=/^(\S+)\s*(.*)$/;var H=["model","collection","el","id","attributes","className","tagName","events"];i.extend(T.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){this._removeElement();this.stopListening();return this},_removeElement:function(){this.$el.remove()},setElement:function(t){this.undelegateEvents();this._setElement(t);this.delegateEvents();return this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t);this.el=this.$el[0]},delegateEvents:function(t){t||(t=i.result(this,"events"));if(!t)return this;this.undelegateEvents();for(var e in t){var n=t[e];if(!i.isFunction(n))n=this[n];if(!n)continue;var r=e.match(P);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(t,e,i){this.$el.on(t+".delegateEvents"+this.cid,e,i);return this},undelegateEvents:function(){if(this.$el)this.$el.off(".delegateEvents"+this.cid);return this},undelegate:function(t,e,i){this.$el.off(t+".delegateEvents"+this.cid,e,i);return this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(!this.el){var t=i.extend({},i.result(this,"attributes"));if(this.id)t.id=i.result(this,"id");if(this.className)t["class"]=i.result(this,"className");this.setElement(this._createElement(i.result(this,"tagName")));this._setAttributes(t)}else{this.setElement(i.result(this,"el"))}},_setAttributes:function(t){this.$el.attr(t)}});var $=function(t,e,i,n){switch(e){case 1:return function(){return t[i](this[n])};case 2:return function(e){return t[i](this[n],e)};case 3:return function(e,r){return t[i](this[n],C(e,this),r)};case 4:return function(e,r,s){return t[i](this[n],C(e,this),r,s)};default:return function(){var e=s.call(arguments);e.unshift(this[n]);return t[i].apply(t,e)}}};var A=function(t,e,n,r){i.each(n,function(i,n){if(e[n])t.prototype[n]=$(e,i,n,r)})};var C=function(t,e){if(i.isFunction(t))return t;if(i.isObject(t)&&!e._isModel(t))return R(t);if(i.isString(t))return function(e){return e.get(t)};return t};var R=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};var M={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};var N={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};i.each([[_,M,"models"],[m,N,"attributes"]],function(t){var e=t[0],n=t[1],r=t[2];e.mixin=function(t){var n=i.reduce(i.functions(t),function(t,e){t[e]=0;return t},{});A(e,t,n,r)};A(e,i,n,r)});e.sync=function(t,n,r){var s=j[t];i.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:s,dataType:"json"};if(!r.url){a.url=i.result(n,"url")||V()}if(r.data==null&&n&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(r.attrs||n.toJSON(r))}if(r.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(r.emulateHTTP&&(s==="PUT"||s==="DELETE"||s==="PATCH")){a.type="POST";if(r.emulateJSON)a.data._method=s;var o=r.beforeSend;r.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",s);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!r.emulateJSON){a.processData=false}var h=r.error;r.error=function(t,e,i){r.textStatus=e;r.errorThrown=i;if(h)h.call(r.context,t,e,i)};var u=r.xhr=e.ajax(i.extend(a,r));n.trigger("request",n,u,r);return u};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var O=e.Router=function(t){t||(t={});this.preinitialize.apply(this,arguments);if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var U=/\((.*?)\)/g;var z=/(\(\?)?:\w+/g;var q=/\*\w+/g;var F=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(O.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,n,r){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(n)){r=n;n=""}if(!r)r=this[n];var s=this;e.history.route(t,function(i){var a=s._extractParameters(t,i);if(s.execute(r,a,n)!==false){s.trigger.apply(s,["route:"+n].concat(a));s.trigger("route",n,a);e.history.trigger("route",s,n,a)}});return this},execute:function(t,e,i){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){if(e===n.length-1)return t||null;return t?decodeURIComponent(t):null})}});var B=e.History=function(){this.handlers=[];this.checkUrl=this.checkUrl.bind(this);if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var J=/^[#\/]|\s+$/g;var L=/^\/+|\/+$/g;var W=/#.*$/;B.started=false;i.extend(B.prototype,a,{interval:50,atRoot:function(){var t=this.location.pathname.replace(/[^\/]$/,"$&/");return t===this.root&&!this.getSearch()},matchRoot:function(){var t=this.decodeFragment(this.location.pathname);var e=t.slice(0,this.root.length-1)+"/";return e===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return t.charAt(0)==="/"?t.slice(1):t},getFragment:function(t){if(t==null){if(this._usePushState||!this._wantsHashChange){t=this.getPath()}else{t=this.getHash()}}return t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");B.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._hasHashChange="onhashchange"in window&&(document.documentMode===void 0||document.documentMode>7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(L,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var n=document.body;var r=n.insertBefore(this.iframe,n.firstChild).contentWindow;r.document.open();r.document.close();r.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);B.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!B.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var n=i+t;t=t.replace(W,"");var r=this.decodeFragment(t);if(this.fragment===r)return;this.fragment=r;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,n)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;if(!e.replace){s.document.open();s.document.close()}this._updateHash(s.location,t,e.replace)}}else{return this.location.assign(n)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var n=t.href.replace(/(javascript:|#).*$/,"");t.replace(n+"#"+e)}else{t.hash="#"+e}}});e.history=new B;var D=function(t,e){var n=this;var r;if(t&&i.has(t,"constructor")){r=t.constructor}else{r=function(){return n.apply(this,arguments)}}i.extend(r,n,e);r.prototype=i.create(n.prototype,t);r.prototype.constructor=r;r.__super__=n.prototype;return r};m.extend=_.extend=O.extend=T.extend=B.extend=D;var V=function(){throw new Error('A "url" property or function must be specified')};var G=function(t,e){var i=e.error;e.error=function(n){if(i)i.call(e.context,t,n,e);t.trigger("error",t,n,e)}};return e});
53
54/**
55* DO NOT EDIT THIS FILE.
56* See the following change record for more information,
57* https://www.drupal.org/node/2815083
58* @preserve
59**/
60
61(function () {
62  var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');
63
64  window.drupalSettings = {};
65
66  if (settingsElement !== null) {
67    window.drupalSettings = JSON.parse(settingsElement.textContent);
68  }
69})();;
70window.drupalTranslations = {"strings":{"":{"Save":"Ulo\u017eit","An AJAX HTTP error occurred.":"Objevila se AJAX HTTP chyba.","HTTP Result Code: !status":"V\u00fdsledn\u00fd k\u00f3d HTTP je: !status","An AJAX HTTP request terminated abnormally.":"AJAX HTTP po\u017eadavek skon\u010dil neobvykle.","Debugging information follows.":"N\u00e1sleduj\u00ed informace pro lad\u011bn\u00ed.","Path: !uri":"Cesta: !uri","StatusText: !statusText":"Text stavu: !statusText","ResponseText: !responseText":"Text odpov\u011bdi:  !responseText","ReadyState: !readyState":"ReadyState: !readyState","Please wait...":"Pros\u00edm \u010dekejte...","Changed":"Changed","Home":"Dom\u016f","Next":"Dal\u0161\u00ed","Delete":"Smazat","closed":"zav\u0159en\u00e9","Cancel":"Zru\u0161it","Disable":"Vypnout","Disabled":"Vypnuto","Enabled":"Enabled","File":"Soubor","Edit":"Upravit","Date":"Date","Size":"Size","Link":"Odkaz","Image":"Obr\u00e1zek","root":"ko\u0159en","Name":"Name","Open":"Otev\u0159en\u00e9","Sunday":"Ned\u011ble","Monday":"Pond\u011bl\u00ed","Tuesday":"\u00dater\u00fd","Wednesday":"St\u0159eda","Thursday":"\u010ctvrtek","Friday":"P\u00e1tek","Saturday":"Sobota","Add":"P\u0159idat","Refresh":"Obnoven\u00ed","Upload":"Nahr\u00e1t","Continue":"Pokra\u010dovat","Create":"Vytvo\u0159it","Done":"Hotovo","Width":"\u0160\u00ed\u0159ka","Height":"V\u00fd\u0161ka","Prev":"P\u0159edchoz\u00ed","Mon":"Po","Tue":"\u00dat","Wed":"St","Thu":"\u010ct","Fri":"P\u00e1","Sat":"So","Sun":"Ne","May":"Kv\u011b","Close":"Zav\u0159\u00edt","Add group":"P\u0159idat skupinu","Show":"Uk\u00e1zat","1 item\u0003@count items":"@count polo\u017eka\u0003@count polo\u017eky\u0003@count polo\u017eek","Select all rows in this table":"Ozna\u010dit v\u0161echny \u0159\u00e1dky v t\u00e9to tabulce","Deselect all rows in this table":"Zru\u0161it ozna\u010den\u00ed v\u0161ech \u0159\u00e1dek v t\u00e9to tabulce","Today":"Dnes","Jan":"Led","Feb":"\u00dano","Mar":"B\u0159e","Apr":"Dub","Jun":"\u010cer","Jul":"\u010crv","Aug":"Srp","Sep":"Z\u00e1\u0159","Oct":"\u0158\u00edj","Nov":"Lis","Dec":"Pro","Extend":"Roz\u0161\u00ed\u0159en\u00ed","Su":"Ne","Mo":"Po","Tu":"\u00dat","We":"St","Th":"\u010ct","Fr":"P\u00e1","Sa":"So","Not published":"Nevyd\u00e1no","Loading...":"Na\u010d\u00edt\u00e1n\u00ed...","Apply":"Apply","Select":"Vybrat","Hide":"Skr\u
7000fdt","Unlink":"Zru\u0161it odkaz","Resize":"Zm\u011bnit velikost","Not promoted":"Nen\u00ed na tituln\u00ed str\u00e1nce","mm\/dd\/yy":"mm\/dd\/yy","Error message":"Chybov\u00e1 zpr\u00e1va","Quick edit":"Rychl\u00e1 \u00faprava","button":"tla\u010d\u00edtko","Only files with the following extensions are allowed: %files-allowed.":"Povoleny jsou pouze soubory s n\u00e1sleduj\u00edc\u00edmi p\u0159\u00edponami: %files-allowed.","Edit Link":"Upravit odkaz","Remove group":"Odstranit skupinu","By @name on @date":"U\u017eivatel @name dne @date","By @name":"Dle @name","Not in menu":"Nen\u00ed v menu","Alias: @alias":"Alias: @alias","No alias":"\u017d\u00e1dn\u00fd alias","@label":"@label","New revision":"Nov\u00e1 revize","Drag to re-order":"Pro p\u0159eskupen\u00ed p\u0159et\u00e1hn\u011bte my\u0161\u00ed","Changes made in this table will not be saved until the form is submitted.":"Zm\u011bny proveden\u00e9 v t\u00e9to tabulce budou ulo\u017eeny a\u017e po odesl\u00e1n\u00ed  formul\u00e1\u0159e.","1 byte\u0003@count bytes":"1 bajt\u0003@count bajty\u0003@count bajt\u016f","@size KB":"@size KB","@size MB":"@size MB","Discard changes":"Zahodit zm\u011bny","New group":"Nov\u00e1 skupina","Breadcrumbs":"Breadcrumbs","Saving":"Ukl\u00e1d\u00e1n\u00ed","This permission is inherited from the authenticated user role.":"Pr\u00e1va byla zd\u011bd\u011bna z ov\u011b\u0159en\u00e9 u\u017eivatelsk\u00e9 role.","No revision":"\u017d\u00e1dn\u00e1 revize","Requires a title":"Vy\u017eaduje n\u00e1zev","Not restricted":"Nen\u00ed omezeno","(active tab)":"(aktivn\u00ed z\u00e1lo\u017eka)","Restricted to certain pages":"Omezen\u00fd na ur\u010dit\u00fd str\u00e1nky","The block cannot be placed in this region.":"Blok nem\u016f\u017ee b\u00fdt um\u00edst\u011bn do tohoto regionu.","Hide summary":"Skr\u00fdt souhrn","Edit summary":"Upravit souhrn","Don\u0027t display post information":"Nezobrazovat informace o p\u0159\u00edsp\u011bvku","Collapse":"Sbalit","The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.":"Vybran\u00fd soubor %filename nelze nahr\u00e1t. Jsou povoleny pouze soubory s t\u011bmito p\u0159\u00edponami: %extensions.","Show row weights":"Uka\u017e v\u00e1hy \u0159\u00e1dk\u016f","Hide row weights":"Skryj v\u00e1hy \u0159\u00e1dk\u016f","Apply (all displays)":"Pou\u017e\u00edt (v\u0161echna zobrazen\u00ed)","Apply (this display)":"Pou\u017e\u00edt (tento pohled)","Revert to default":"Obnovit v\u00fdchoz\u00ed","Hide description":"Skr\u00fdt popis","You have unsaved changes":"M\u00e1te neulo\u017een\u00e9 zm\u011bny","Needs to be updated":"Je nutn\u00e9 prov\u00e9st aktualizaci","Does not need to be updated":"Nen\u00ed nutn\u00e9 prov\u00e9st aktualizaci","Show all columns":"Zobrazit v\u0161echny sloupce","Show table cells that were hidden to make the table fit within a small screen.":"Uk\u00e1zat sloupce tabulky, kter\u00e9 byly skryt\u00e9 pro zobrazen\u00ed tabulky na mal\u00fdch displej\u00edch.","List additional actions":"Vypsat dodate\u010dn\u00e9 akce","Flag other translations as outdated":"Ozna\u010dit ostatn\u00ed p\u0159eklady jako zastaral\u00e9","Do not flag other translations as outdated":"Neozna\u010dovat ostatn\u00ed p\u0159eklady jako zastaral\u00e9","opened":"otev\u0159eno","Horizontal orientation":"Horizont\u00e1ln\u00ed orientace","Vertical orientation":"Vertik\u00e1ln\u00ed orientace","You have unsaved changes.":"M\u00e1te neulo\u017een\u00e9 zm\u011bny.","No styles configured":"Nejsou konfigurov\u00e1ny \u017e\u00e1dn\u00e9 styly","@count styles configured":"Nakonfigurov\u00e1no @count styl\u016f","Press the esc key to exit.":"Stiskn\u011bte kl\u00e1vesu esc pro ukon\u010den\u00ed.","Uploads disabled":"Nahr\u00e1v\u00e1n\u00ed soubor\u016f je vypnuto.","Uploads enabled, max size: @size @dimensions":"Nahr\u00e1v\u00e1n\u00ed soubor\u016f je povoleno, maxim\u00e1ln\u00ed velikost: @size @dimensions","Discard changes?":"Zahodit zm\u011bny?","Hide group names":"Skr\u00fdt n\u00e1zvy skupin","Show group names":"Zobrazit n\u00e1zvy skupin","Press the down arrow key to create a new row.":"Nov\u00fd \u0159\u00e1dek vytvo\u0159\u00edte stisknut\u00edm kl\u00e1vesy \u0022\u0161ipka dol\u016f\u0022.","@name @type.":"@name @type.","Press the down arrow key to activate.":"Pro aktivaci stiskn\u011bte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","Press the down arrow key to create a new button group in a new row.":"Pro vytvo\u0159en\u00ed nov\u00e9 skupiny tla\u010d\u00edtek do nov\u00e9ho \u0159\u00e1dku stiskn\u011bte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","This is the last group. Move the button forward to create a new group.":"Toto je posledn\u00ed skupina. Chcete-li vytvo\u0159it novou, p\u0159esu\u0148te tla\u010d\u00edtko do dal\u0161\u00ed skupiny.","The \u0022@name\u0022 button is currently enabled.":"Tla\u010d\u00edtko \u0022@name\u0022 je aktu\u00e1ln\u011b zapnuto.","Use the keyboard arrow keys to change the position of this button.":"Pro zm\u011bnu pozice tohoto tla\u010d\u00edtka pou\u017eijte kl\u00e1vesy \u0161ipek.","Press the up arrow key on the top row to disable the button.":"Pro vypnut\u00ed tla\u010d\u00edtka stiskn\u011bte v prvn\u00edm \u0159\u00e1dku kl\u00e1vesu \u0022\u0161ipka nahoru\u0022.","The \u0022@name\u0022 button is currently disabled.":"Tla\u010d\u00edtko \u0022@name\u0022 je vypnuto.","Use the down arrow key to move this button into the active toolbar.":"Pro p\u0159esunut\u00ed tohoto tla\u010d\u00edta do aktivn\u00edho panelu n\u00e1stroj\u016f pou\u017eijte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","This @name is currently enabled.":"Tento @name je aktu\u00e1ln\u011b zapnut\u00fd.","Use the keyboard arrow keys to change the position of this separator.":"Pro zm\u011bnu pozice tohoto odd\u011blova\u010de pou\u017eijte kl\u00e1vesy \u0161ipek.","Separators are used to visually split individual buttons.":"Odd\u011blova\u010de se pou\u017e\u00edvaj\u00ed pro vizu\u00e1ln\u00ed odd\u011blen\u00ed jednotliv\u00fdch tla\u010d\u00edtek.","This @name is currently disabled.":"Tento @name je aktu\u00e1ln\u011b vypnut\u00fd.","Use the down arrow key to move this separator into the active toolbar.":"Pro p\u0159esun tohoto odd\u011blova\u010de do aktivn\u00edho panelu n\u00e1stroj\u016f pou\u017eijte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","You may add multiple separators to each button group.":"Do ka\u017ed\u00e9 skupiny tla\u010d\u00edtek m\u016f\u017eete vlo\u017eit v\u00edce odd\u011blova\u010d\u016f.","Please provide a name for the button group.":"Zadejte n\u00e1zev pro skupinu tla\u010d\u00edtek.","Button group name":"N\u00e1zev skupiny tla\u010d\u00edtek","Editing the name of the \u0022@groupName\u0022 button group in a dialog.":"\u00daprava n\u00e1zvu skupiny tla\u010d\u00edtek \u0022@groupName\u0022 v dialogov\u00e9m okn\u011b.","Place a button to create a new button group.":"Pro vytvo\u0159en\u00ed nov\u00e9 skupiny tla\u010d\u00edtek um\u00edst\u011bte tla\u010d\u00edtko.","Add a CKEditor button group to the end of this row.":"P\u0159idat skupinu tla\u010d\u00edtek CKEditoru na konec tohoto \u0159\u00e1dku.","Rich Text Editor, !label field":"Editor form\u00e1tovan\u00e9ho textu, pole !label","Hide lower priority columns":"Skr\u00fdt sloupce s ni\u017e\u0161\u00ed prioritou","Insert this token into your form":"Vlo\u017eit token do formul\u00e1\u0159e","First click a text field to insert your tokens into.":"Nejprve klikn\u011bte do textov\u00e9ho pole, do kter\u00e9ho chcete tokeny vlo\u017eit.","Included":"Zahrnuto","View cart":"Zobrazit ko\u0161\u00edk","Editing the name of the new button group in a dialog.":"\u00daprava n\u00e1zvu nov\u00e9 skupiny tla\u010d\u00edtek v dialogov\u00e9m okn\u011b.","Select None":"Vybrat: Nic","Select All":"Vybrat: V\u0161e","@count item":"@count ks","@count items":"@count ks","Add file":"P\u0159idat soubor","New folder":"Nov\u00e1 slo\u017eka","Please select a file.":"Zvolte soubor.","%path is a predefined path and can not be modified.":"%path je p\u0159eddefinovan\u00e1 cesta a nelze ji zm\u011bnit.","%filename is not allowed.":"%filename nen\u00ed povolen.","%filename contains invali
70d characters. Use only alphanumeric characters for better portability.":"%filename obsahuje neplatn\u00e9 znaky. Pro lep\u0161\u00ed p\u0159enositelnost pou\u017e\u00edvejte pouze alfanumerick\u00e9 znaky.","Image dimensions must be smaller than %dimensions pixels.":"Rozm\u011bry obr\u00e1zku mus\u00ed b\u00fdt men\u0161\u00ed ne\u017e %dimensions pixel\u016f.","%name is not an image.":"%name nen\u00ed obr\u00e1zek.","!items (!size)":"!items (!size)","!percent%":"!percent%","Delete !filename?\u0003Delete the selected @count items?":"Smazat !filename?\u0003Smazat @count vybran\u00e9 polo\u017eky?\u0003Smazat @count vybran\u00fdch polo\u017eek?","%filename already exists.":"%filename ji\u017e existuje.","%filename is %filesize exceeding the maximum file size of %maxsize.":"%filename s velikost\u00ed %filesize p\u0159esahuje maxim\u00e1ln\u00ed velikost souboru %maxsize.","Invalid response received from the server.":"Neplatn\u00e1 odpov\u011b\u010f od serveru.","Insert images using Imce File Manager":"Vkl\u00e1dat obr\u00e1zky pomoc\u00ed spr\u00e1vce soubor\u016f IMCE","Insert file links using Imce File Manager":"Vlo\u017eit odkazy na soubory pomoc\u00ed spr\u00e1vce soubor\u016f IMCE","Video Embed":"Vlo\u017eit video"},"Long month name":{"January":"Leden","February":"\u00danor","March":"B\u0159ezen","April":"Duben","May":"Kv\u011bten","June":"\u010cerven","July":"\u010cervenec","August":"Srpen","September":"Z\u00e1\u0159\u00ed","October":"\u0158\u00edjen","November":"Listopad","December":"Prosinec"}},"pluralFormula":{"1":0,"2":1,"3":1,"4":1,"21":0,"22":1,"23":1,"24":1,"31":0,"32":1,"33":1,"34":1,"41":0,"42":1,"43":1,"44":1,"51":0,"52":1,"53":1,"54":1,"61":0,"62":1,"63":1,"64":1,"71":0,"72":1,"73":1,"74":1,"81":0,"82":1,"83":1,"84":1,"91":0,"92":1,"93":1,"94":1,"101":0,"102":1,"103":1,"104":1,"121":0,"122":1,"123":1,"124":1,"131":0,"132":1,"133":1,"134":1,"141":0,"142":1,"143":1,"144":1,"151":0,"152":1,"153":1,"154":1,"161":0,"162":1,"163":1,"164":1,"171":0,"172":1,"173":1,"174":1,"181":0,"182":1,"183":1,"184":1,"191":0,"192":1,"193":1,"194":1,"default":2}};;
71/**
72* DO NOT EDIT THIS FILE.
73* See the following change record for more information,
74* https://www.drupal.org/node/2815083
75* @preserve
76**/
77
78window.Drupal = { behaviors: {}, locale: {} };
79
80(function (Drupal, drupalSettings, drupalTranslations, console, Proxy, Reflect) {
81  Drupal.throwError = function (error) {
82    setTimeout(function () {
83      throw error;
84    }, 0);
85  };
86
87  Drupal.attachBehaviors = function (context, settings) {
88    context = context || document;
89    settings = settings || drupalSettings;
90    var behaviors = Drupal.behaviors;
91
92    Object.keys(behaviors || {}).forEach(function (i) {
93      if (typeof behaviors[i].attach === 'function') {
94        try {
95          behaviors[i].attach(context, settings);
96        } catch (e) {
97          Drupal.throwError(e);
98        }
99      }
100    });
101  };
102
103  Drupal.detachBehaviors = function (context, settings, trigger) {
104    context = context || document;
105    settings = settings || drupalSettings;
106    trigger = trigger || 'unload';
107    var behaviors = Drupal.behaviors;
108
109    Object.keys(behaviors || {}).forEach(function (i) {
110      if (typeof behaviors[i].detach === 'function') {
111        try {
112          behaviors[i].detach(context, settings, trigger);
113        } catch (e) {
114          Drupal.throwError(e);
115        }
116      }
117    });
118  };
119
120  Drupal.checkPlain = function (str) {
121    str = str.toString().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
122    return str;
123  };
124
125  Drupal.formatString = function (str, args) {
126    var processedArgs = {};
127
128    Object.keys(args || {}).forEach(function (key) {
129      switch (key.charAt(0)) {
130        case '@':
131          processedArgs[key] = Drupal.checkPlain(args[key]);
132          break;
133
134        case '!':
135          processedArgs[key] = args[key];
136          break;
137
138        default:
139          processedArgs[key] = Drupal.theme('placeholder', args[key]);
140          break;
141      }
142    });
143
144    return Drupal.stringReplace(str, processedArgs, null);
145  };
146
147  Drupal.stringReplace = function (str, args, keys) {
148    if (str.length === 0) {
149      return str;
150    }
151
152    if (!Array.isArray(keys)) {
153      keys = Object.keys(args || {});
154
155      keys.sort(function (a, b) {
156        return a.length - b.length;
157      });
158    }
159
160    if (keys.length === 0) {
161      return str;
162    }
163
164    var key = keys.pop();
165    var fragments = str.split(key);
166
167    if (keys.length) {
168      for (var i = 0; i < fragments.length; i++) {
169        fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0));
170      }
171    }
172
173    return fragments.join(args[key]);
174  };
175
176  Drupal.t = function (str, args, options) {
177    options = options || {};
178    options.context = options.context || '';
179
180    if (typeof drupalTranslations !== 'undefined' && drupalTranslations.strings && drupalTranslations.strings[options.context] && drupalTranslations.strings[options.context][str]) {
181      str = drupalTranslations.strings[options.context][str];
182    }
183
184    if (args) {
185      str = Drupal.formatString(str, args);
186    }
187    return str;
188  };
189
190  Drupal.url = function (path) {
191    return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path;
192  };
193
194  Drupal.url.toAbsolute = function (url) {
195    var urlParsingNode = document.createElement('a');
196
197    try {
198      url = decodeURIComponent(url);
199    } catch (e) {}
200
201    urlParsingNode.setAttribute('href', url);
202
203    return urlParsingNode.cloneNode(false).href;
204  };
205
206  Drupal.url.isLocal = function (url) {
207    var absoluteUrl = Drupal.url.toAbsolute(url);
208    var protocol = window.location.protocol;
209
210    if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) {
211      protocol = 'https:';
212    }
213    var baseUrl = protocol + '//' + window.location.host + drupalSettings.path.baseUrl.slice(0, -1);
214
215    try {
216      absoluteUrl = decodeURIComponent(absoluteUrl);
217    } catch (e) {}
218    try {
219      baseUrl = decodeURIComponent(baseUrl);
220    } catch (e) {}
221
222    return absoluteUrl === baseUrl || absoluteUrl.indexOf(baseUrl + '/') === 0;
223  };
224
225  Drupal.formatPlural = function (count, singular, plural, args, options) {
226    args = args || {};
227    args['@count'] = count;
228
229    var pluralDelimiter = drupalSettings.pluralDelimiter;
230    var translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter);
231    var index = 0;
232
233    if (typeof drupalTranslations !== 'undefined' && drupalTranslations.pluralFormula) {
234      index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula.default;
235    } else if (args['@count'] !== 1) {
236      index = 1;
237    }
238
239    return translations[index];
240  };
241
242  Drupal.encodePath = function (item) {
243    return window.encodeURIComponent(item).replace(/%2F/g, '/');
244  };
245
246  Drupal.deprecationError = function (_ref) {
247    var message = _ref.message;
248
249    if (drupalSettings.suppressDeprecationErrors === false && typeof console !== 'undefined' && console.warn) {
250      console.warn('[Deprecation] ' + message);
251    }
252  };
253
254  Drupal.deprecatedProperty = function (_ref2) {
255    var target = _ref2.target,
256        deprecatedProperty = _ref2.deprecatedProperty,
257        message = _ref2.message;
258
259    if (!Proxy || !Reflect) {
260      return target;
261    }
262
263    return new Proxy(target, {
264      get: function get(target, key) {
265        for (var _len = arguments.length, rest = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
266          rest[_key - 2] = arguments[_key];
267        }
268
269        if (key === deprecatedProperty) {
270          Drupal.deprecationError({ message: message });
271        }
272        return Reflect.get.apply(Reflect, [target, key].concat(rest));
273      }
274    });
275  };
276
277  Drupal.theme = function (func) {
278    if (func in Drupal.theme) {
279      var _Drupal$theme;
280
281      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
282        args[_key2 - 1] = arguments[_key2];
283      }
284
285      return (_Drupal$theme = Drupal.theme)[func].apply(_Drupal$theme, args);
286    }
287  };
288
289  Drupal.theme.placeholder = function (str) {
290    return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>';
291  };
292})(Drupal, window.drupalSettings, window.drupalTranslations, window.console, window.Proxy, window.Reflect);;
293/**
294* DO NOT EDIT THIS FILE.
295* See the following change record for more information,
296* https://www.drupal.org/node/2815083
297* @preserve
298**/
299
300if (window.jQuery) {
301  jQuery.noConflict();
302}
303
304document.documentElement.className += ' js';
305
306(function (Drupal, drupalSettings) {
307  var domReady = function domReady(callback) {
308    if (document.readyState !== 'loading') {
309      callback();
310    } else {
311      var listener = function listener() {
312        callback();
313        document.removeEventListener('DOMContentLoaded', listener);
314      };
315      document.addEventListener('DOMContentLoaded', listener);
316    }
317  };
318
319  domReady(function () {
320    Drupal.attachBehaviors(document, drupalSettings);
321  });
322})(Drupal, window.drupalSettings);;
323/**
324 * @file
325 * Cherries by @toddmotto, @cferdinandi, @adamfschwartz, @daniellmb.
326 *
327 * @todo: Use Cash or Underscore when jQuery is dropped by supported plugins.
328 */
329
330/* global define, module */
331(function (root, factory) {
332
333  'use strict';
334
335  // Inspired by https://github.com/addyosmani/memoize.js/blob/master/memoize.js
336  if (typeof define === 'function' && define.amd) {
337    // AMD. Register as an anonymous module.
338    define([], factory);
339  }
340  else if (typeof exports === 'object') {
341    // Node. Does not work with strict CommonJS, but only CommonJS-like
342    // environments that support module.exports, like Node.
343    module.exports = factory();
344  }
345  else {
346    // Browser globals (root is window).
347    root.dBlazy = factory();
348  }
349})(this, function () {
350
351  'use strict';
352
353  /**
354   * Object for public APIs where dBlazy stands for drupalBlazy.
355   *
356   * @namespace
357   */
358  var dBlazy = {};
359
360  // See https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
361  if (!Element.prototype.matches) {
362    Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
363  }
364
365  /**
366   * Check if the given element matches the selector.
367   *
368   * @name dBlazy.matches
369   *
370   * @param {Element} elem
371   *   The current element.
372   * @param {String} selector
373   *   Selector to match against (class, ID, data attribute, or tag).
374   *
375   * @return {Boolean}
376   *   Returns true if found, else false.
377   *
378   * @see http://caniuse.com/#feat=matchesselector
379   * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches
380   */
381  dBlazy.matches = function (elem, selector) {
382    // Check if matches, excluding HTMLDocument, see ::closest().
383    if (elem.matches(selector)) {
384      return true;
385    }
386
387    return false;
388  };
389
390  /**
391   * Returns device pixel ratio.
392   *
393   * @return {Integer}
394   *   Returns the device pixel ratio.
395   */
396  dBlazy.pixelRatio = function () {
397    return window.devicePixelRatio || 1;
398  };
399
400  /**
401   * Returns cross-browser window width.
402   *
403   * @return {Integer}
404   *   Returns the window width.
405   */
406  dBlazy.windowWidth = function () {
407    return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || window.screen.width;
408  };
409
410  /**
411   * Returns data from the current active window.
412   *
413   * When being resized, the browser gave no data about pixel ratio from desktop
414   * to mobile, not vice versa. Unless delayed for 4s+, not less, which is of
415   * course unacceptable.
416   *
417   * @name dBlazy.activeWidth
418   *
419   * @param {Object} dataset
420   *   The dataset object must be keyed by window width.
421   * @param {Boolean} mobileFirst
422   *   Whether to use min-width, or max-width.
423   *
424   * @return {mixed}
425   *   Returns data from the current active window.
426   */
427  dBlazy.activeWidth = function (dataset, mobileFirst) {
428    var me = this;
429    var keys = Object.keys(dataset);
430    var xs = keys[0];
431    var xl = keys[keys.length - 1];
432    var pr = (me.windowWidth() * me.pixelRatio());
433    var ww = mobileFirst ? me.windowWidth() : pr;
434    var mw = function (w) {
435      // The picture wants <= (approximate), non-picture wants >=, wtf.
436      return mobileFirst ? parseInt(w) <= ww : parseInt(w) >= ww;
437    };
438
439    var data = keys.filter(mw).map(function (v) {
440      return dataset[v];
441    })[mobileFirst ? 'pop' : 'shift']();
442
443    return typeof data === 'undefined' ? dataset[ww >= xl ? xl : xs] : data;
444  };
445
446  /**
447   * Check if the HTML tag matches a specified string.
448   *
449   * @name dBlazy.equal
450   *
451   * @param {Element} el
452   *   The element to compare.
453   * @param {String} str
454   *   HTML tag to match against.
455   *
456   * @return {Boolean}
457   *   Returns true if matches, else false.
458   */
459  dBlazy.equal = function (el, str) {
460    return el !== null && el.nodeName.toLowerCase() === str;
461  };
462
463  /**
464   * Get the closest matching element up the DOM tree.
465   *
466   * Inspired by Chris Ferdinandi, http://github.com/cferdinandi/smooth-scroll.
467   *
468   * @name dBlazy.closest
469   *
470   * @param {Element} el
471   *   Starting element.
472   * @param {String} selector
473   *   Selector to match against (class, ID, data attribute, or tag).
474   *
475   * @return {Boolean|Element}
476   *   Returns null if not match found.
477   *
478   * @see http://caniuse.com/#feat=element-closest
479   * @see http://caniuse.com/#feat=matchesselector
480   * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches
481   */
482  dBlazy.closest = function (el, selector) {
483    var parent;
484    while (el) {
485      parent = el.parentElement;
486      if (parent && parent.matches(selector)) {
487        return parent;
488      }
489      el = parent;
490    }
491
492    return null;
493  };
494
495  /**
496   * Returns a new object after merging two, or more objects.
497   *
498   * Inspired by @adamfschwartz, @zackbloom, http://youmightnotneedjquery.com.
499   *
500   * @name dBlazy.extend
501   *
502   * @param {Object} out
503   *   The objects to merge together.
504   *
505   * @return {Object}
506   *   Merged values of defaults and options.
507   */
508  dBlazy.extend = Object.assign || function (out) {
509    out = out || {};
510
511    for (var i = 1, len = arguments.length; i < len; i++) {
512      if (!arguments[i]) {
513        continue;
514      }
515
516      for (var key in arguments[i]) {
517        if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
518          out[key] = arguments[i][key];
519        }
520      }
521    }
522
523    return out;
524  };
525
526  /**
527   * A simple forEach() implementation for Arrays, Objects and NodeLists.
528   *
529   * @name dBlazy.forEach
530   *
531   * @author Todd Motto
532   * @link https://github.com/toddmotto/foreach
533   *
534   * @param {Array|Object|NodeList} collection
535   *   Collection of items to iterate.
536   * @param {Function} callback
537   *   Callback function for each iteration.
538   * @param {Array|Object|NodeList} scope
539   *   Object/NodeList/Array that forEach is iterating over (aka `this`).
540   */
541  dBlazy.forEach = function (collection, callback, scope) {
542    var proto = Object.prototype;
543    if (proto.toString.call(collection) === '[object Object]') {
544      for (var prop in collection) {
545        if (proto.hasOwnProperty.call(collection, prop)) {
546          callback.call(scope, collection[prop], prop, collection);
547        }
548      }
549    }
550    else if (collection) {
551      for (var i = 0, len = collection.length; i < len; i++) {
552        callback.call(scope, collection[i], i, collection);
553      }
554    }
555  };
556
557  /**
558   * A simple hasClass wrapper.
559   *
560   * @name dBlazy.hasClass
561   *
562   * @param {Element} el
563   *   The HTML element.
564   * @param {String} name
565   *   The class name.
566   *
567   * @return {bool}
568   *   True if of of the method is supported.
569   *
570   * @todo remove for el.classList.contains() alone.
571   */
572  dBlazy.hasClass = function (el, name) {
573    if (el.classList) {
574      return el.classList.contains(name);
575    }
576    else {
577      return el.className.indexOf(name) !== -1;
578    }
579  };
580
581  /**
582   * A simple attributes wrapper.
583   *
584   * @name dBlazy.setAttr
585   *
586   * @param {Element} el
587   *   The HTML element.
588   * @param {String} attr
589   *   The attr name.
590   * @param {Boolean} remove
591   *   True if should remove.
592   */
593  dBlazy.setAttr = function (el, attr, remove) {
594    if (el.hasAttribute('data-' + attr)) {
595      var dataAttr = el.getAttribute('data-' + attr);
596      if (attr === 'src') {
597        el.src = dataAttr;
598      }
599      else {
600        el.setAttribute(attr, dataAttr);
601      }
602
603      if (remove) {
604        el.removeAttribute('data-' + attr);
605      }
606    }
607  };
608
609  /**
610   * A simple attributes wrapper looping based on the given attributes.
611   *
612   * @name dBlazy.setAttrs
613   *
614   * @param {Element} el
615   *   The HTML element.
616   * @param {Array} attrs
617   *   The attr names.
618   * @param {Boolean} remove
619   *   True if should remove.
620   */
621  dBlazy.setAttrs = function (el, attrs, remove) {
622    var me = this;
623
624    me.forEach(attrs, function (src) {
625      me.setAttr(el, src, remove);
626    });
627  };
628
629  /**
630   * A simple attributes wrapper, looping based on sources (picture/ video).
631   *
632   * @name dBlazy.setAttrsWithSources
633   *
634   * @param {Element} el
635   *   The starting HTML element.
636   * @param {String} attr
637   *   The attr name, can be SRC or SRCSET.
638   * @param {Boolean} remove
639   *   True if should remove.
640   */
641  dBlazy.setAttrsWithSources = function (el, attr, remove) {
642    var me = this;
643    var parent = el.parentNode || null;
644    var isPicture = parent && me.equal(parent, 'picture');
645    var targets = isPicture ? parent.getElementsByTagName('source') : el.getElementsByTagName('source');
646
647    attr = attr || (isPicture ? 'srcset' : 'src');
648
649    if (targets.length) {
650      me.forEach(targets, function (source) {
651        me.setAttr(source, attr, remove);
652      });
653    }
654  };
655
656  /**
657   * Updates CSS background with multi-breakpoint images.
658   *
659   * @name dBlazy.updateBg
660   *
661   * @param {Element} el
662   *   The container HTML element.
663   * @param {Boolean} mobileFirst
664   *   Whether to use min-width or max-width.
665   */
666  dBlazy.updateBg = function (el, mobileFirst) {
667    var me = this;
668    var backgrounds = me.parse(el.getAttribute('data-backgrounds'));
669
670    if (backgrounds) {
671      var bg = me.activeWidth(backgrounds, mobileFirst);
672      if (bg && bg !== 'undefined') {
673        el.style.backgroundImage = 'url("' + bg.src + '")';
674
675        // Allows to disable Aspect ratio if it has known/ fixed heights such as
676        // gridstack multi-size boxes.
677        if (bg.ratio && !el.classList.contains('b-noratio')) {
678          el.style.paddingBottom = bg.ratio + '%';
679        }
680      }
681    }
682  };
683
684  /**
685   * A simple removeAttribute wrapper.
686   *
687   * @name dBlazy.removeAttrs
688   *
689   * @param {Element} el
690   *   The HTML element.
691   * @param {Array} attrs
692   *   The attr names.
693   */
694  dBlazy.removeAttrs = function (el, attrs) {
695    this.forEach(attrs, function (attr) {
696      el.removeAttribute('data-' + attr);
697    });
698  };
699
700  /**
701   * A simple wrapper for event delegation like jQuery.on().
702   *
703   * Inspired by http://stackoverflow.com/questions/30880757/
704   * javascript-equivalent-to-on.
705   *
706   * @name dBlazy.on
707   *
708   * @param {Element} elm
709   *   The parent HTML element.
710   * @param {String} eventName
711   *   The event name to trigger.
712   * @param {String} childEl
713   *   Child selector to match against (class, ID, data attribute, or tag).
714   * @param {Function} callback
715   *   The callback function.
716   *
717   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
718   */
719  dBlazy.on = function (elm, eventName, childEl, callback) {
720    elm.addEventListener(eventName, function (event) {
721      var t = event.target;
722      event.delegateTarget = elm;
723      while (t && t !== this) {
724        if (dBlazy.matches(t, childEl)) {
725          callback.call(t, event);
726        }
727        t = t.parentNode;
728      }
729    });
730  };
731
732  /**
733   * A simple wrapper for addEventListener.
734   *
735   * Made public from original bLazy library.
736   *
737   * @name dBlazy.bindEvent
738   *
739   * @param {Element} el
740   *   The HTML element.
741   * @param {String} type
742   *   The event name to add.
743   * @param {Function} fn
744   *   The callback function.
745   * @param {Object} params
746   *   The optional param passed into a custom event.
747   *
748   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
749   * @todo remove old IE references after another check.
750   */
751  dBlazy.bindEvent = function (el, type, fn, params) {
752    var defaults = {capture: false, passive: true};
753    var extraParams = params ? this.extend(defaults, params) : defaults;
754    if (el.attachEvent) {
755      el.attachEvent('on' + type, fn, extraParams);
756    }
757    else {
758      el.addEventListener(type, fn, extraParams);
759    }
760  };
761
762  /**
763   * A simple wrapper for removeEventListener.
764   *
765   * Made public from original bLazy library.
766   *
767   * @name dBlazy.unbindEvent
768   *
769   * @param {Element} el
770   *   The HTML element.
771   * @param {String} type
772   *   The event name to remove.
773   * @param {Function} fn
774   *   The callback function.
775   * @param {Object} params
776   *   The optional param passed into a custom event.
777   *
778   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
779   * @todo remove old IE references after another check.
780   */
781  dBlazy.unbindEvent = function (el, type, fn, params) {
782    var defaults = {capture: false, passive: true};
783    var extraParams = params ? this.extend(defaults, params) : defaults;
784    if (el.detachEvent) {
785      el.detachEvent('on' + type, fn, extraParams);
786    }
787    else {
788      el.removeEventListener(type, fn, extraParams);
789    }
790  };
791
792  /**
793   * Executes a function once.
794   *
795   * @name dBlazy.once
796   *
797   * @author Daniel Lamb <[email protected]>
798   * @link https://github.com/daniellmb/once.js
799   *
800   * @param {Function} fn
801   *   The executed function.
802   *
803   * @return {Object}
804   *   The function result.
805   */
806  dBlazy.once = function (fn) {
807    var result;
808    var ran = false;
809    return function proxy() {
810      if (ran) {
811        return result;
812      }
813      ran = true;
814      result = fn.apply(this, arguments);
815      // For garbage collection.
816      fn = null;
817      return result;
818    };
819  };
820
821  /**
822   * A simple wrapper for JSON.parse() for string within data-* attributes.
823   *
824   * @name dBlazy.parse
825   *
826   * @param {String} str
827   *   The string to convert into JSON object.
828   *
829   * @return {Object|Boolean}
830   *   The JSON object, or false in case invalid.
831   */
832  dBlazy.parse = function (str) {
833    try {
834      return JSON.parse(str);
835    }
836    catch (e) {
837      return false;
838    }
839  };
840
841  /**
842   * A simple wrapper to animate anything using animate.css.
843   *
844   * @name dBlazy.animate
845   *
846   * @param {Element} el
847   *   The animated HTML element.
848   * @param {String} animation
849   *   Any custom animation name, fallbacks to [data-animation].
850   */
851  dBlazy.animate = function (el, animation) {
852    var me = this;
853    var props = [
854      'animation',
855      'animation-duration',
856      'animation-delay',
857      'animation-iteration-count'
858    ];
859
860    animation = animation || el.dataset.animation;
861    el.classList.add('animated', animation);
862    me.forEach(['Duration', 'Delay', 'IterationCount'], function (key) {
863      if ('animation' + key in el.dataset) {
864        el.style['animation' + key] = el.dataset['animation' + key];
865      }
866    });
867
868    function animationEnd() {
869      me.removeAttrs(el, props);
870
871      el.classList.add('is-b-animated');
872      el.classList.remove('animated', animation);
873
874      me.forEach(props, function (key) {
875        el.style.removeProperty(key);
876      });
877
878      me.unbindEvent(el, 'animationend', animationEnd);
879    }
880
881    me.bindEvent(el, 'animationend', animationEnd);
882  };
883
884  /**
885   * A simple wrapper to delay callback function, taken out of blazy library.
886   *
887   * Alternative to core Drupal.debounce for D7 compatibility, and easy port.
888   *
889   * @name dBlazy.throttle
890   *
891   * @param {Function} fn
892   *   The callback function.
893   * @param {Int} minDelay
894   *   The execution delay in milliseconds.
895   * @param {Object} scope
896   *   The scope of the function to apply to, normally this.
897   *
898   * @return {Function}
899   *   The function executed at the specified minDelay.
900   */
901  dBlazy.throttle = function (fn, minDelay, scope) {
902    var lastCall = 0;
903    return function () {
904      var now = +new Date();
905      if (now - lastCall < minDelay) {
906        return;
907      }
908      lastCall = now;
909      fn.apply(scope, arguments);
910    };
911  };
912
913  /**
914   * A simple wrapper to delay callback function on window resize.
915   *
916   * @name dBlazy.resize
917   *
918   * @link https://github.com/louisremi/jquery-smartresize
919   *
920   * @param {Function} c
921   *   The callback function.
922   * @param {Int} t
923   *   The timeout.
924   *
925   * @return {Function}
926   *   The callback function.
927   */
928  dBlazy.resize = function (c, t) {
929    window.onresize = function () {
930      window.clearTimeout(t);
931      t = window.setTimeout(c, 200);
932    };
933    return c;
934  };
935
936  /**
937   * A simple wrapper for triggering event like jQuery.trigger().
938   *
939   * @name dBlazy.trigger
940   *
941   * @param {Element} elm
942   *   The HTML element.
943   * @param {String} eventName
944   *   The event name to trigger.
945   * @param {Object} custom
946   *   The optional object passed into a custom event.
947   * @param {Object} param
948   *   The optional param passed into a custom event.
949   *
950   * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
951   * @todo: See if any consistent way for both custom and native events.
952   */
953  dBlazy.trigger = function (elm, eventName, custom, param) {
954    var event;
955    var data = {
956      detail: custom || {}
957    };
958
959    if (typeof param === 'undefined') {
960      data.bubbles = true;
961      data.cancelable = true;
962    }
963
964    // Native.
965    // IE >= 9 compat, else SCRIPT445: Object doesn't support this action.
966    // https://msdn.microsoft.com/library/ff975299(v=vs.85).aspx
967    if (typeof window.CustomEvent === 'function') {
968      event = new CustomEvent(eventName, data);
969    }
970    else {
971      event = document.createEvent('CustomEvent');
972      event.initCustomEvent(eventName, true, true, data);
973    }
974
975    elm.dispatchEvent(event);
976  };
977
978  return dBlazy;
979
980});
981;
982!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,
vendor: 6,594 bytes, line 982
982sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.o
vendor: 3,442 bytes, line 982
982ptions.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.
982slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:
982parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"}
982,e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0}
vendor: 5,619 bytes, line 982
982,100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};
982!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}
982):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+
982o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
982,e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});
983;
984/**
985 * @file
986 * Provides Intersection Observer API, or bLazy loader.
987 */
988
989(function (Drupal, drupalSettings, _db, window, document) {
990
991  'use strict';
992
993  var _dataAnimation = 'data-animation';
994  var _dataDimensions = 'data-dimensions';
995  var _dataBg = 'data-backgrounds';
996  var _dataRatio = 'data-ratio';
997  var _firstBlazy = 'blazy--first';
998  var _isNativeExecuted = false;
999  var _isPictureExecuted = false;
1000  var _resizeTick = 0;
1001
1002  /**
1003   * Blazy public methods.
1004   *
1005   * @namespace
1006   */
1007  Drupal.blazy = Drupal.blazy || {
1008    context: null,
1009    init: null,
1010    items: [],
1011    ratioItems: [],
1012    windowWidth: 0,
1013    blazySettings: drupalSettings.blazy || {},
1014    ioSettings: drupalSettings.blazyIo || {},
1015    revalidate: false,
1016    options: {},
1017    globals: function () {
1018      var me = this;
1019      var commons = {
1020        isUniform: false,
1021        success: me.clearing.bind(me),
1022        error: me.clearing.bind(me),
1023        selector: '.b-lazy',
1024        errorClass: 'b-error',
1025        successClass: 'b-loaded'
1026      };
1027
1028      return _db.extend(me.blazySettings, me.ioSettings, commons);
1029    },
1030
1031    clearing: function (el) {
1032      var me = this;
1033      var cn = _db.closest(el, '.media');
1034      var an = _db.closest(el, '[' + _dataAnimation + ']');
1035
1036      // Clear loading classes.
1037      me.clearLoading(el);
1038
1039      // Reevaluate the element.
1040      me.reevaluate(el);
1041
1042      // Container might be the el itself for BG, do not NULL check here.
1043      me.updateContainer(el, cn);
1044
1045      // Supports blur, animate.css for CSS background, picture, image, media.
1046      if (an !== null || me.has(el, _dataAnimation)) {
1047        _db.animate(an !== null ? an : el);
1048      }
1049
1050      // Provides event listeners for easy overrides without full overrides.
1051      _db.trigger(el, 'blazy.done', {options: me.options});
1052
1053      // Initializes the native lazy loading once the first found is loaded.
1054      if (!_isNativeExecuted) {
1055        _db.trigger(me.context, 'blazy.native', {options: me.options});
1056
1057        _isNativeExecuted = true;
1058      }
1059    },
1060
1061    clearLoading: function (el) {
1062      // The .b-lazy element can be attached to IMG, or DIV as CSS background.
1063      // The .(*)loading can be .media, .grid, .slide__content, .box, etc.
1064      var loaders = [
1065        el,
1066        _db.closest(el, '.is-loading'),
1067        _db.closest(el, '[class*="loading"]')
1068      ];
1069
1070      _db.forEach(loaders, function (loader) {
1071        if (loader !== null) {
1072          loader.className = loader.className.replace(/(\S+)loading/, '');
1073        }
1074      });
1075    },
1076
1077    isLoaded: function (el) {
1078      return el !== null && el.classList.contains(this.options.successClass);
1079    },
1080
1081    reevaluate: function (el) {
1082      var me = this;
1083      var ie = el.classList.contains('b-responsive') && el.hasAttribute('data-pfsrc');
1084
1085      // In case an error, try forcing it.
1086      if (me.init !== null && _db.hasClass(el, me.options.errorClass)) {
1087        el.classList.remove(me.options.errorClass);
1088
1089        // This is a rare case, hardly called, just nice to have for errors.
1090        window.setTimeout(function () {
1091          me.init.load(el);
1092        }, 10);
1093      }
1094
1095      // @see http://scottjehl.github.io/picturefill/
1096      if (window.picturefill && ie) {
1097        window.picturefill({
1098          reevaluate: true,
1099          elements: [el]
1100        });
1101      }
1102    },
1103
1104    has: function (el, attribute) {
1105      return el !== null && el.hasAttribute(attribute);
1106    },
1107
1108    contains: function (el, name) {
1109      return el !== null && el.classList.contains(name);
1110    },
1111
1112    updateContainer: function (el, cn) {
1113      var me = this;
1114      var isPicture = _db.equal(el.parentNode, 'picture') && me.has(cn, _dataDimensions);
1115
1116      // Fixed for effect Blur messes up Aspect ratio Fluid calculation.
1117      window.setTimeout(function () {
1118        if (me.isLoaded(el)) {
1119          // Adds context for effetcs: blur, etc. considering BG, or just media.
1120          (me.contains(cn, 'media') ? cn : el).classList.add('is-b-loaded');
1121
1122          if (isPicture) {
1123            me.updatePicture(el, cn);
1124          }
1125
1126          if (me.has(el, _dataBg)) {
1127            _db.updateBg(el, me.options.mobileFirst);
1128          }
1129        }
1130      });
1131    },
1132
1133    updatePicture: function (el, cn) {
1134      var me = this;
1135      var pad = Math.round(((el.naturalHeight / el.naturalWidth) * 100), 2);
1136
1137      cn.style.paddingBottom = pad + '%';
1138
1139      // Swap all aspect ratio once to reduce abrupt ratio changes for the rest.
1140      if (!_isPictureExecuted) {
1141        _db.trigger(me.context, 'blazy.uniform', {pad: pad});
1142        _isPictureExecuted = true;
1143      }
1144    },
1145
1146    /**
1147     * Updates the dynamic multi-breakpoint aspect ratio: bg, picture or image.
1148     *
1149     * This only applies to Responsive images with aspect ratio fluid.
1150     * Static ratio (media--ratio--169, etc.) is ignored and uses CSS instead.
1151     *
1152     * @param {HTMLElement} cn
1153     *   The .media--ratio--fluid container HTML element.
1154     */
1155    updateRatio: function (cn) {
1156      var me = this;
1157      var dimensions = _db.parse(cn.getAttribute(_dataDimensions)) || ('dimensions' in me.options ? me.options.dimensions : false);
1158
1159      if (!dimensions) {
1160        me.updateFallbackRatio(cn);
1161        return;
1162      }
1163
1164      // For picture, this is more a dummy space till the image is downloaded.
1165      var isPicture = cn.querySelector('picture') !== null && _resizeTick > 0;
1166      var pad = _db.activeWidth(dimensions, isPicture);
1167
1168      if (pad !== 'undefined') {
1169        cn.style.paddingBottom = pad + '%';
1170      }
1171
1172      // Fix for picture or bg element with resizing.
1173      if (_resizeTick > 0 && (isPicture || me.has(cn, _dataBg))) {
1174        me.updateContainer((isPicture ? cn.querySelector('img') : cn), cn);
1175      }
1176    },
1177
1178    updateFallbackRatio: function (cn) {
1179      // Only rewrites if the style is indeed stripped out by Twig, and not set.
1180      if (!cn.hasAttribute('style') && cn.hasAttribute(_dataRatio)) {
1181        cn.style.paddingBottom = cn.getAttribute(_dataRatio) + '%';
1182      }
1183    },
1184
1185    doNativeLazy: function () {
1186      var me = this;
1187      var doNative = function (el) {
1188        // Reset attributes, and let supportive browsers lazy load natively.
1189        _db.setAttrs(el, ['srcset', 'src'], true);
1190
1191        // Also supports PICTURE or (future) VIDEO which contains SOURCEs.
1192        _db.setAttrsWithSources(el, false, true);
1193
1194        // Mark it loaded to prevent Blazy/IO to do any further work.
1195        el.classList.add(me.options.successClass);
1196        me.clearing(el);
1197      };
1198
1199      var onNative = function () {
1200        _db.forEach(me.items, doNative);
1201      };
1202
1203      _db.bindEvent(me.context, 'blazy.native', onNative, {once: true});
1204    },
1205
1206    isNativeLazy: function () {
1207      return 'loading' in HTMLImageElement.prototype;
1208    },
1209
1210    isIo: function () {
1211      return this.ioSettings && this.ioSettings.enabled && 'IntersectionObserver' in window;
1212    },
1213
1214    isBlazy: function () {
1215      return !this.isIo() && 'Blazy' in window;
1216    },
1217
1218    forEach: function (context) {
1219      var el = context.querySelector('[data-blazy]');
1220      var blazies = context.querySelectorAll('.blazy:not(.blazy--on)');
1221
1222      // Various use cases: w/o formaters, custom, or basic, and mixed.
1223      // The [data-blazy] is set by the module for formatters, or Views gallery.
1224      if (blazies.length > 0) {
1225        _db.forEach(blazies, doBlazy, context);
1226      }
1227
1228      // Runs basic Blazy if no [data-blazy] found, probably a single image or
1229      // a theme that does not use field attributes, or (non-grid) BlazyFilter.
1230      if (el === null) {
1231        initBlazy(context);
1232      }
1233    },
1234
1235    run: function (opts) {
1236      return this.isIo() ? new BioMedia(opts) : new Blazy(opts);
1237    },
1238
1239    afterInit: function (context) {
1240      var me = this;
1241      me.ratioItems = context.querySelector('.media--ratio') === null ? [] : context.querySelectorAll('.media--ratio');
1242      var shouldLoop = me.ratioItems.length > 0;
1243
1244      var swapRatio = function (e) {
1245        var pad = e.detail.pad;
1246
1247        if (pad > 10) {
1248          _db.forEach(me.ratioItems, function (cn) {
1249            cn.style.paddingBottom = pad + '%';
1250          }, context);
1251        }
1252      };
1253
1254      var checkRatio = function () {
1255        me.windowWidth = _db.windowWidth();
1256
1257        if (shouldLoop) {
1258          _db.forEach(me.ratioItems, me.updateRatio.bind(me), context);
1259        }
1260
1261        // BC with bLazy, native/IO doesn't need to revalidate, bLazy does.
1262        // Scenarios: long horizontal containers, Slick carousel slidesToShow >
1263        // 3. If any issue, add a class `blazy--revalidate` manually to .blazy.
1264        if (!me.isNativeLazy() && (me.isBlazy() || me.revalidate)) {
1265          me.init.revalidate(true);
1266        }
1267
1268        // Provides event listeners for easy overrides without full overrides.
1269        // Checks for weird contexts, in case spit out during AJAX, etc.
1270        if (context.classList && context.classList.contains(_firstBlazy)) {
1271          _db.trigger(context, 'blazy.afterInit', {
1272            items: me.items || me.ratioItems,
1273            windowWidth: me.windowWidth
1274          });
1275        }
1276        _resizeTick++;
1277      };
1278
1279      // Checks for aspect ratio, onload event is a bit later.
1280      // @todo use Drupal.debounce if it makes any difference.
1281      checkRatio();
1282      _db.bindEvent(window, 'resize', Drupal.debounce(checkRatio, 200, true));
1283
1284      // Reduces abrupt ratio changes for the rest after the first loaded.
1285      if (me.options.isUniform && shouldLoop) {
1286        _db.bindEvent(context, 'blazy.uniform', swapRatio, {once: true});
1287      }
1288    }
1289
1290  };
1291
1292  /**
1293   * Initialize the blazy instance, either basic, advanced, or native.
1294   *
1295   * The initialization may take once for basic (not using module formatters),
1296   * or per .blazy/[data-blazy] formatter when there are one or many on a page.
1297   *
1298   * @param {HTMLElement} context
1299   *   This can be document, or .blazy container w/o [data-blazy].
1300   * @param {Object} opts
1301   *   The options might be empty for basic blazy, not using formatters.
1302   */
1303  var initBlazy = function (context, opts) {
1304    var me = Drupal.blazy;
1305    // Set docroot in case we are in an iframe.
1306    var documentElement = context instanceof HTMLDocument ? context : _db.closest(context, 'html');
1307
1308    opts = opts || {};
1309    opts.mobileFirst = opts.mobileFirst || false;
1310    documentElement = documentElement || document;
1311    if (!document.documentElement.isSameNode(documentElement)) {
1312      opts.root = documentElement;
1313    }
1314
1315    me.options = _db.extend({}, me.globals(), opts);
1316    me.context = context;
1317
1318    // Old bLazy, not IO, might need scrolling CSS selector like Modal library.
1319    // A scrolling modal with an iframe like Entity Browser has no issue since
1320    // the scrolling container is the entire DOM. Another use case is parallax.
1321    var scrollElms = '#drupal-modal, .is-b-scroll';
1322    if (me.options.container) {
1323      scrollElms += ', ' + me.options.container.trim();
1324    }
1325    me.options.container = scrollElms;
1326
1327    // Swap lazy attributes to let supportive browsers lazy load them.
1328    // This means Blazy and even IO should not lazy-load them any more.
1329    // Ensures to not touch lazy-loaded AJAX, or likely non-supported elements:
1330    // Video, DIV, etc. Only IMG and IFRAME are supported for now.
1331    var nativeSelector = me.options.selector + '[loading]:not(.' + me.options.successClass + ')';
1332    me.items = documentElement.querySelector(nativeSelector) === null ? [] : documentElement.querySelectorAll(nativeSelector);
1333    if (me.isNativeLazy()) {
1334      // Intentionally on the second line to not hit it till verified.
1335      if (me.items.length > 0) {
1336        me.doNativeLazy();
1337      }
1338    }
1339
1340    // Put the blazy/IO instance into a public object for references/ overrides.
1341    // If native lazy load is supported, the following will skip internally.
1342    me.init = me.run(me.options);
1343
1344    // Reacts on resizing per 200ms.
1345    me.afterInit(context);
1346  };
1347
1348  /**
1349   * Blazy utility functions.
1350   *
1351   * @param {HTMLElement} elm
1352   *   The .blazy/[data-blazy] container, not the lazyloaded .b-lazy element.
1353   */
1354  function doBlazy(elm) {
1355    var me = Drupal.blazy;
1356    var dataAttr = elm.getAttribute('data-blazy');
1357    var opts = (!dataAttr || dataAttr === '1') ? {} : (_db.parse(dataAttr) || {});
1358
1359    me.revalidate = me.revalidate || elm.classList.contains('blazy--revalidate');
1360    elm.classList.add('blazy--on');
1361
1362    // Initializes native, IntersectionObserver, or Blazy instance.
1363    // @todo attempts to optimize nested blazies, remove check if any issue.
1364    if (_db.closest(elm, '.blazy') === null) {
1365      elm.classList.add(_firstBlazy);
1366      opts.isUniform = me.contains(elm, 'blazy--field') || me.contains(elm, 'blazy--grid') || me.contains(elm, 'blazy--uniform');
1367      initBlazy(elm, opts);
1368    }
1369  }
1370
1371  /**
1372   * Attaches blazy behavior to HTML element identified by .blazy/[data-blazy].
1373   *
1374   * The .blazy/[data-blazy] is the .b-lazy container, might be .field, etc.
1375   * The .b-lazy is the individual IMG, IFRAME, PICTURE, VIDEO, DIV, BODY, etc.
1376   * The lazy-loaded element is .b-lazy, not its container. Note the hypen (b-)!
1377   *
1378   * @type {Drupal~behavior}
1379   */
1380  Drupal.behaviors.blazy = {
1381    attach: function (context) {
1382      // Drupal.attachBehaviors already does this so if this is necessary,
1383      // someone does an invalid call. But let's be robust here.
1384      // Note: context can be unexpected <script> element with Media library.
1385      context = context || document;
1386
1387      // Originally identified at D7, yet might happen at D8 with AJAX.
1388      // Prevents jQuery AJAX messes up where context might be an array.
1389      if ('length' in context) {
1390        context = context[0];
1391      }
1392
1393      // Runs Blazy with multi-serving images, and aspect ratio supports.
1394      // W/o [data-blazy] to address various scenarios like custom simple works,
1395      // or within Views UI which is not easy to set [data-blazy] via UI.
1396      _db.once(Drupal.blazy.forEach(context));
1397    }
1398  };
1399
1400}(Drupal, drupalSettings, dBlazy, this, this.document));
1401;
1402/**
1403* DO NOT EDIT THIS FILE.
1404* See the following change record for more information,
1405* https://www.drupal.org/node/2815083
1406* @preserve
1407**/
1408
1409(function ($, Drupal) {
1410  Drupal.theme.progressBar = function (id) {
1411    return '<div id="' + id + '" class="progress" aria-live="polite">' + '<div class="progress__label">&nbsp;</div>' + '<div class="progress__track"><div class="progress__bar"></div></div>' + '<div class="progress__percentage"></div>' + '<div class="progress__description">&nbsp;</div>' + '</div>';
1412  };
1413
1414  Drupal.ProgressBar = function (id, updateCallback, method, errorCallback) {
1415    this.id = id;
1416    this.method = method || 'GET';
1417    this.updateCallback = updateCallback;
1418    this.errorCallback = errorCallback;
1419
1420    this.element = $(Drupal.theme('progressBar', id));
1421  };
1422
1423  $.extend(Drupal.ProgressBar.prototype, {
1424    setProgress: function setProgress(percentage, message, label) {
1425      if (percentage >= 0 && percentage <= 100) {
1426        $(this.element).find('div.progress__bar').css('width', percentage + '%');
1427        $(this.element).find('div.progress__percentage').html(percentage + '%');
1428      }
1429      $('div.progress__description', this.element).html(message);
1430      $('div.progress__label', this.element).html(label);
1431      if (this.updateCallback) {
1432        this.updateCallback(percentage, message, this);
1433      }
1434    },
1435    startMonitoring: function startMonitoring(uri, delay) {
1436      this.delay = delay;
1437      this.uri = uri;
1438      this.sendPing();
1439    },
1440    stopMonitoring: function stopMonitoring() {
1441      clearTimeout(this.timer);
1442
1443      this.uri = null;
1444    },
1445    sendPing: function sendPing() {
1446      if (this.timer) {
1447        clearTimeout(this.timer);
1448      }
1449      if (this.uri) {
1450        var pb = this;
1451
1452        var uri = this.uri;
1453        if (uri.indexOf('?') === -1) {
1454          uri += '?';
1455        } else {
1456          uri += '&';
1457        }
1458        uri += '_format=json';
1459        $.ajax({
1460          type: this.method,
1461          url: uri,
1462          data: '',
1463          dataType: 'json',
1464          success: function success(progress) {
1465            if (progress.status === 0) {
1466              pb.displayError(progress.data);
1467              return;
1468            }
1469
1470            pb.setProgress(progress.percentage, progress.message, progress.label);
1471
1472            pb.timer = setTimeout(function () {
1473              pb.sendPing();
1474            }, pb.delay);
1475          },
1476          error: function error(xmlhttp) {
1477            var e = new Drupal.AjaxError(xmlhttp, pb.uri);
1478            pb.displayError('<pre>' + e.message + '</pre>');
1479          }
1480        });
1481      }
1482    },
1483    displayError: function displayError(string) {
1484      var error = $('<div class="messages messages--error"></div>').html(string);
1485      $(this.element).before(error).hide();
1486
1487      if (this.errorCallback) {
1488        this.errorCallback(this);
1489      }
1490    }
1491  });
1492})(jQuery, Drupal);;
1493/**
1494 * @file
1495 * Extends methods from core/misc/progress.js.
1496 */
1497
1498(function ($, Drupal) {
1499
1500  'use strict';
1501
1502  /**
1503   * Theme function for the progress bar.
1504   *
1505   * @param {string} id
1506   *
1507   * @return {string}
1508   *   The HTML for the progress bar.
1509   */
1510  Drupal.theme.progressBar = function (id) {
1511    return '<div class="progress-wrapper" aria-live="polite">' +
1512             '<div class="message"></div>'+
1513             '<div id ="' + id + '" class="progress progress-striped active">' +
1514               '<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' +
1515                 '<span class="percentage"></span>' +
1516               '</div>' +
1517             '</div>' +
1518             '<div class="progress-label"></div>' +
1519           '</div>';
1520  };
1521
1522  $.extend(Drupal.ProgressBar.prototype, /** @lends Drupal.ProgressBar */{
1523
1524    /**
1525     * Set the percentage and status message for the progressbar.
1526     *
1527     * @param {number} percentage
1528     * @param {string} message
1529     * @param {string} label
1530     */
1531    setProgress: function (percentage, message, label) {
1532      if (percentage >= 0 && percentage <= 100) {
1533        $(this.element).find('.progress-bar').css('width', percentage + '%').attr('aria-valuenow', percentage);
1534        $(this.element).find('.percentage').html(percentage + '%');
1535      }
1536      if (message) {
1537        // Remove the unnecessary whitespace at the end of the message.
1538        message = message.replace(/<br\/>&nbsp;|\s*$/, '');
1539
1540        $('.message', this.element).html(message);
1541      }
1542      if (label) {
1543        $('.progress-label', this.element).html(label);
1544      }
1545      if (this.updateCallback) {
1546        this.updateCallback(percentage, message, this);
1547      }
1548    },
1549
1550    /**
1551     * Display errors on the page.
1552     *
1553     * @param {string} string
1554     */
1555    displayError: function (string) {
1556      var error = $('<div class="alert alert-block alert-error"><button class="close" data-dismiss="alert">&times;</button><h4>' + Drupal.t('Error message') + '</h4></div>').append(string);
1557      $(this.element).before(error).hide();
1558
1559      if (this.errorCallback) {
1560        this.errorCallback(this);
1561      }
1562    }
1563  });
1564
1565})(jQuery, Drupal);
1566;
1567/**
1568* DO NOT EDIT THIS FILE.
1569* See the following change record for more information,
1570* https://www.drupal.org/node/2815083
1571* @preserve
1572**/
1573function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
1574
1575(function ($, window, Drupal, drupalSettings) {
1576  Drupal.behaviors.AJAX = {
1577    attach: function attach(context, settings) {
1578      function loadAjaxBehavior(base) {
1579        var elementSettings = settings.ajax[base];
1580        if (typeof elementSettings.selector === 'undefined') {
1581          elementSettings.selector = '#' + base;
1582        }
1583        $(elementSettings.selector).once('drupal-ajax').each(function () {
1584          elementSettings.element = this;
1585          elementSettings.base = base;
1586          Drupal.ajax(elementSettings);
1587        });
1588      }
1589
1590      Object.keys(settings.ajax || {}).forEach(function (base) {
1591        return loadAjaxBehavior(base);
1592      });
1593
1594      Drupal.ajax.bindAjaxLinks(document.body);
1595
1596      $('.use-ajax-submit').once('ajax').each(function () {
1597        var elementSettings = {};
1598
1599        elementSettings.url = $(this.form).attr('action');
1600
1601        elementSettings.setClick = true;
1602
1603        elementSettings.event = 'click';
1604
1605        elementSettings.progress = { type: 'throbber' };
1606        elementSettings.base = $(this).attr('id');
1607        elementSettings.element = this;
1608
1609        Drupal.ajax(elementSettings);
1610      });
1611    },
1612    detach: function detach(context, settings, trigger) {
1613      if (trigger === 'unload') {
1614        Drupal.ajax.expired().forEach(function (instance) {
1615          Drupal.ajax.instances[instance.instanceIndex] = null;
1616        });
1617      }
1618    }
1619  };
1620
1621  Drupal.AjaxError = function (xmlhttp, uri, customMessage) {
1622    var statusCode = void 0;
1623    var statusText = void 0;
1624    var responseText = void 0;
1625    if (xmlhttp.status) {
1626      statusCode = '\n' + Drupal.t('An AJAX HTTP error occurred.') + '\n' + Drupal.t('HTTP Result Code: !status', {
1627        '!status': xmlhttp.status
1628      });
1629    } else {
1630      statusCode = '\n' + Drupal.t('An AJAX HTTP request terminated abnormally.');
1631    }
1632    statusCode += '\n' + Drupal.t('Debugging information follows.');
1633    var pathText = '\n' + Drupal.t('Path: !uri', { '!uri': uri });
1634    statusText = '';
1635
1636    try {
1637      statusText = '\n' + Drupal.t('StatusText: !statusText', {
1638        '!statusText': $.trim(xmlhttp.statusText)
1639      });
1640    } catch (e) {}
1641
1642    responseText = '';
1643
1644    try {
1645      responseText = '\n' + Drupal.t('ResponseText: !responseText', {
1646        '!responseText': $.trim(xmlhttp.responseText)
1647      });
1648    } catch (e) {}
1649
1650    responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, '');
1651    responseText = responseText.replace(/[\n]+\s+/g, '\n');
1652
1653    var readyStateText = xmlhttp.status === 0 ? '\n' + Drupal.t('ReadyState: !readyState', {
1654      '!readyState': xmlhttp.readyState
1655    }) : '';
1656
1657    customMessage = customMessage ? '\n' + Drupal.t('CustomMessage: !customMessage', {
1658      '!customMessage': customMessage
1659    }) : '';
1660
1661    this.message = statusCode + pathText + statusText + customMessage + responseText + readyStateText;
1662
1663    this.name = 'AjaxError';
1664  };
1665
1666  Drupal.AjaxError.prototype = new Error();
1667  Drupal.AjaxError.prototype.constructor = Drupal.AjaxError;
1668
1669  Drupal.ajax = function (settings) {
1670    if (arguments.length !== 1) {
1671      throw new Error('Drupal.ajax() function must be called with one configuration object only');
1672    }
1673
1674    var base = settings.base || false;
1675    var element = settings.element || false;
1676    delete settings.base;
1677    delete settings.element;
1678
1679    if (!settings.progress && !element) {
1680      settings.progress = false;
1681    }
1682
1683    var ajax = new Drupal.Ajax(base, element, settings);
1684    ajax.instanceIndex = Drupal.ajax.instances.length;
1685    Drupal.ajax.instances.push(ajax);
1686
1687    return ajax;
1688  };
1689
1690  Drupal.ajax.instances = [];
1691
1692  Drupal.ajax.expired = function () {
1693    return Drupal.ajax.instances.filter(function (instance) {
1694      return instance && instance.element !== false && !document.body.contains(instance.element);
1695    });
1696  };
1697
1698  Drupal.ajax.bindAjaxLinks = function (element) {
1699    $(element).find('.use-ajax').once('ajax').each(function (i, ajaxLink) {
1700      var $linkElement = $(ajaxLink);
1701
1702      var elementSettings = {
1703        progress: { type: 'throbber' },
1704        dialogType: $linkElement.data('dialog-type'),
1705        dialog: $linkElement.data('dialog-options'),
1706        dialogRenderer: $linkElement.data('dialog-renderer'),
1707        base: $linkElement.attr('id'),
1708        element: ajaxLink
1709      };
1710      var href = $linkElement.attr('href');
1711
1712      if (href) {
1713        elementSettings.url = href;
1714        elementSettings.event = 'click';
1715      }
1716      Drupal.ajax(elementSettings);
1717    });
1718  };
1719
1720  Drupal.Ajax = function (base, element, elementSettings) {
1721    var defaults = {
1722      event: element ? 'mousedown' : null,
1723      keypress: true,
1724      selector: base ? '#' + base : null,
1725      effect: 'none',
1726      speed: 'none',
1727      method: 'replaceWith',
1728      progress: {
1729        type: 'throbber',
1730        message: Drupal.t('Please wait...')
1731      },
1732      submit: {
1733        js: true
1734      }
1735    };
1736
1737    $.extend(this, defaults, elementSettings);
1738
1739    this.commands = new Drupal.AjaxCommands();
1740
1741    this.instanceIndex = false;
1742
1743    if (this.wrapper) {
1744      this.wrapper = '#' + this.wrapper;
1745    }
1746
1747    this.element = element;
1748
1749    this.element_settings = elementSettings;
1750
1751    this.elementSettings = elementSettings;
1752
1753    if (this.element && this.element.form) {
1754      this.$form = $(this.element.form);
1755    }
1756
1757    if (!this.url) {
1758      var $element = $(this.element);
1759      if ($element.is('a')) {
1760        this.url = $element.attr('href');
1761      } else if (this.element && element.form) {
1762        this.url = this.$form.attr('action');
1763      }
1764    }
1765
1766    var originalUrl = this.url;
1767
1768    this.url = this.url.replace(/\/nojs(\/|$|\?|#)/, '/ajax$1');
1769
1770    if (drupalSettings.ajaxTrustedUrl[originalUrl]) {
1771      drupalSettings.ajaxTrustedUrl[this.url] = true;
1772    }
1773
1774    var ajax = this;
1775
1776    ajax.options = {
1777      url: ajax.url,
1778      data: ajax.submit,
1779      beforeSerialize: function beforeSerialize(elementSettings, options) {
1780        return ajax.beforeSerialize(elementSettings, options);
1781      },
1782      beforeSubmit: function beforeSubmit(formValues, elementSettings, options) {
1783        ajax.ajaxing = true;
1784        return ajax.beforeSubmit(formValues, elementSettings, options);
1785      },
1786      beforeSend: function beforeSend(xmlhttprequest, options) {
1787        ajax.ajaxing = true;
1788        return ajax.beforeSend(xmlhttprequest, options);
1789      },
1790      success: function success(response, status, xmlhttprequest) {
1791        if (typeof response === 'string') {
1792          response = $.parseJSON(response);
1793        }
1794
1795        if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) {
1796          if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') {
1797            var customMessage = Drupal.t('The response failed verification so will not be processed.');
1798            return ajax.error(xmlhttprequest, ajax.url, customMessage);
1799          }
1800        }
1801
1802        return ajax.success(response, status);
1803      },
1804      complete: function complete(xmlhttprequest, status) {
1805        ajax.ajaxing = false;
1806        if (status === 'error' || status === 'parsererror') {
1807          return ajax.error(xmlhttprequest, ajax.url);
1808        }
1809      },
1810
1811      dataType: 'json',
1812      type: 'POST'
1813    };
1814
1815    if (elementSettings.dialog) {
1816      ajax.options.data.dialogOptions = elementSettings.dialog;
1817    }
1818
1819    if (ajax.options.url.indexOf('?') === -1) {
1820      ajax.options.url += '?';
1821    } else {
1822      ajax.options.url += '&';
1823    }
1824
1825    var wrapper = 'drupal_' + (elementSettings.dialogType || 'ajax');
1826    if (elementSettings.dialogRenderer) {
1827      wrapper += '.' + elementSettings.dialogRenderer;
1828    }
1829    ajax.options.url += Drupal.ajax.WRAPPER_FORMAT + '=' + wrapper;
1830
1831    $(ajax.element).on(elementSettings.event, function (event) {
1832      if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) {
1833        throw new Error(Drupal.t('The callback URL is not local and n
1833ot trusted: !url', {
1834          '!url': ajax.url
1835        }));
1836      }
1837      return ajax.eventResponse(this, event);
1838    });
1839
1840    if (elementSettings.keypress) {
1841      $(ajax.element).on('keypress', function (event) {
1842        return ajax.keypressResponse(this, event);
1843      });
1844    }
1845
1846    if (elementSettings.prevent) {
1847      $(ajax.element).on(elementSettings.prevent, false);
1848    }
1849  };
1850
1851  Drupal.ajax.WRAPPER_FORMAT = '_wrapper_format';
1852
1853  Drupal.Ajax.AJAX_REQUEST_PARAMETER = '_drupal_ajax';
1854
1855  Drupal.Ajax.prototype.execute = function () {
1856    if (this.ajaxing) {
1857      return;
1858    }
1859
1860    try {
1861      this.beforeSerialize(this.element, this.options);
1862
1863      return $.ajax(this.options);
1864    } catch (e) {
1865      this.ajaxing = false;
1866      window.alert('An error occurred while attempting to process ' + this.options.url + ': ' + e.message);
1867
1868      return $.Deferred().reject();
1869    }
1870  };
1871
1872  Drupal.Ajax.prototype.keypressResponse = function (element, event) {
1873    var ajax = this;
1874
1875    if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') {
1876      event.preventDefault();
1877      event.stopPropagation();
1878      $(element).trigger(ajax.elementSettings.event);
1879    }
1880  };
1881
1882  Drupal.Ajax.prototype.eventResponse = function (element, event) {
1883    event.preventDefault();
1884    event.stopPropagation();
1885
1886    var ajax = this;
1887
1888    if (ajax.ajaxing) {
1889      return;
1890    }
1891
1892    try {
1893      if (ajax.$form) {
1894        if (ajax.setClick) {
1895          element.form.clk = element;
1896        }
1897
1898        ajax.$form.ajaxSubmit(ajax.options);
1899      } else {
1900        ajax.beforeSerialize(ajax.element, ajax.options);
1901        $.ajax(ajax.options);
1902      }
1903    } catch (e) {
1904      ajax.ajaxing = false;
1905      window.alert('An error occurred while attempting to process ' + ajax.options.url + ': ' + e.message);
1906    }
1907  };
1908
1909  Drupal.Ajax.prototype.beforeSerialize = function (element, options) {
1910    if (this.$form && document.body.contains(this.$form.get(0))) {
1911      var settings = this.settings || drupalSettings;
1912      Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize');
1913    }
1914
1915    options.data[Drupal.Ajax.AJAX_REQUEST_PARAMETER] = 1;
1916
1917    var pageState = drupalSettings.ajaxPageState;
1918    options.data['ajax_page_state[theme]'] = pageState.theme;
1919    options.data['ajax_page_state[theme_token]'] = pageState.theme_token;
1920    options.data['ajax_page_state[libraries]'] = pageState.libraries;
1921  };
1922
1923  Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {};
1924
1925  Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) {
1926    if (this.$form) {
1927      options.extraData = options.extraData || {};
1928
1929      options.extraData.ajax_iframe_upload = '1';
1930
1931      var v = $.fieldValue(this.element);
1932      if (v !== null) {
1933        options.extraData[this.element.name] = v;
1934      }
1935    }
1936
1937    $(this.element).prop('disabled', true);
1938
1939    if (!this.progress || !this.progress.type) {
1940      return;
1941    }
1942
1943    var progressIndicatorMethod = 'setProgressIndicator' + this.progress.type.slice(0, 1).toUpperCase() + this.progress.type.slice(1).toLowerCase();
1944    if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') {
1945      this[progressIndicatorMethod].call(this);
1946    }
1947  };
1948
1949  Drupal.theme.ajaxProgressThrobber = function (message) {
1950    var messageMarkup = typeof message === 'string' ? Drupal.theme('ajaxProgressMessage', message) : '';
1951    var throbber = '<div class="throbber">&nbsp;</div>';
1952
1953    return '<div class="ajax-progress ajax-progress-throbber">' + throbber + messageMarkup + '</div>';
1954  };
1955
1956  Drupal.theme.ajaxProgressIndicatorFullscreen = function () {
1957    return '<div class="ajax-progress ajax-progress-fullscreen">&nbsp;</div>';
1958  };
1959
1960  Drupal.theme.ajaxProgressMessage = function (message) {
1961    return '<div class="message">' + message + '</div>';
1962  };
1963
1964  Drupal.theme.ajaxProgressBar = function ($element) {
1965    return $('<div class="ajax-progress ajax-progress-bar"></div>').append($element);
1966  };
1967
1968  Drupal.Ajax.prototype.setProgressIndicatorBar = function () {
1969    var progressBar = new Drupal.ProgressBar('ajax-progress-' + this.element.i
1969d, $.noop, this.progress.method, $.noop);
1970    if (this.progress.message) {
1971      progressBar.setProgress(-1, this.progress.message);
1972    }
1973    if (this.progress.url) {
1974      progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500);
1975    }
1976    this.progress.element = $(Drupal.theme('ajaxProgressBar', progressBar.element));
1977    this.progress.object = progressBar;
1978    $(this.element).after(this.progress.element);
1979  };
1980
1981  Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
1982    this.progress.element = $(Drupal.theme('ajaxProgressThrobber', this.progress.message));
1983    $(this.element).after(this.progress.element);
1984  };
1985
1986  Drupal.Ajax.prototype.setProgressIndicatorFullscreen = function () {
1987    this.progress.element = $(Drupal.theme('ajaxProgressIndicatorFullscreen'));
1988    $('body').append(this.progress.element);
1989  };
1990
1991  Drupal.Ajax.prototype.success = function (response, status) {
1992    var _this = this;
1993
1994    if (this.progress.element) {
1995      $(this.progress.element).remove();
1996    }
1997    if (this.progress.object) {
1998      this.progress.object.stopMonitoring();
1999    }
2000    $(this.element).prop('disabled', false);
2001
2002    var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray();
2003
2004    var focusChanged = false;
2005    Object.keys(response || {}).forEach(function (i) {
2006      if (response[i].command && _this.commands[response[i].command]) {
2007        _this.commands[response[i].command](_this, response[i], status);
2008        if (response[i].command === 'invoke' && response[i].method === 'focus') {
2009          focusChanged = true;
2010        }
2011      }
2012    });
2013
2014    if (!focusChanged && this.element && !$(this.element).data('disable-refocus')) {
2015      var target = false;
2016
2017      for (var n = elementParents.length - 1; !target && n >= 0; n--) {
2018        target = document.querySelector('[data-drupal-selector="' + elementParents[n].getAttribute('data-drupal-selector') + '"]');
2019      }
2020
2021      if (target) {
2022        $(target).trigger('focus');
2023      }
2024    }
2025
2026    if (this.$form && document.body.contains(this.$form.get(0))) {
2027      var settings = this.settings || drupalSettings;
2028      Drupal.attachBehaviors(this.$form.get(0), settings);
2029    }
2030
2031    this.settings = null;
2032  };
2033
2034  Drupal.Ajax.prototype.getEffect = function (response) {
2035    var type = response.effect || this.effect;
2036    var speed = response.speed || this.speed;
2037
2038    var effect = {};
2039    if (type === 'none') {
2040      effect.showEffect = 'show';
2041      effect.hideEffect = 'hide';
2042      effect.showSpeed = '';
2043    } else if (type === 'fade') {
2044      effect.showEffect = 'fadeIn';
2045      effect.hideEffect = 'fadeOut';
2046      effect.showSpeed = speed;
2047    } else {
2048      effect.showEffect = type + 'Toggle';
2049      effect.hideEffect = type + 'Toggle';
2050      effect.showSpeed = speed;
2051    }
2052
2053    return effect;
2054  };
2055
2056  Drupal.Ajax.prototype.error = function (xmlhttprequest, uri, customMessage) {
2057    if (this.progress.element) {
2058      $(this.progress.element).remove();
2059    }
2060    if (this.progress.object) {
2061      this.progress.object.stopMonitoring();
2062    }
2063
2064    $(this.wrapper).show();
2065
2066    $(this.element).prop('disabled', false);
2067
2068    if (this.$form && document.body.contains(this.$form.get(0))) {
2069      var settings = this.settings || drupalSettings;
2070      Drupal.attachBehaviors(this.$form.get(0), settings);
2071    }
2072    throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage);
2073  };
2074
2075  Drupal.theme.ajaxWrapperNewContent = function ($newContent, ajax, response) {
2076    return (response.effect || ajax.effect) !== 'none' && $newContent.filter(function (i) {
2077      return !($newContent[i].nodeName === '#comment' || $newContent[i].nodeName === '#text' && /^(\s|\n|\r)*$/.test($newContent[i].textContent));
2078    }).length > 1 ? Drupal.theme('ajaxWrapperMultipleRootElements', $newContent) : $newContent;
2079  };
2080
2081  Drupal.theme.ajaxWrapperMultipleRootElements = function ($elements) {
2082    return $('<div></div>').append($elements);
2083  };
2084
2085  Drupal.AjaxCommands = function () {};
2086  Drupal.AjaxCommands.prototype = {
2087    insert: function insert(ajax, response) {
2088      var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper);
2089      var method = response.method || ajax.method;
2090      var effect = ajax.getEffect(response);
2091
2092      var settings = response.settings || ajax.settings || drupalSettings;
2093
2094      var $newContent = $($.parseHTML(response.data, document, true));
2095
2096      $newContent = Drupal.theme('ajaxWrapperNewContent', $newContent, ajax, response);
2097
2098      switch (method) {
2099        case 'html':
2100        case 'replaceWith':
2101        case 'replaceAll':
2102        case 'empty':
2103        case 'remove':
2104          Drupal.detachBehaviors($wrapper.get(0), settings);
2105          break;
2106        default:
2107          break;
2108      }
2109
2110      $wrapper[method]($newContent);
2111
2112      if (effect.showEffect !== 'show') {
2113        $newContent.hide();
2114      }
2115
2116      var $ajaxNewContent = $newContent.find('.ajax-new-content');
2117      if ($ajaxNewContent.length) {
2118        $ajaxNewContent.hide();
2119        $newContent.show();
2120        $ajaxNewContent[effect.showEffect](effect.showSpeed);
2121      } else if (effect.showEffect !== 'show') {
2122        $newContent[effect.showEffect](effect.showSpeed);
2123      }
2124
2125      if ($newContent.parents('html').length) {
2126        $newContent.each(function (index, element) {
2127          if (element.nodeType === Node.ELEMENT_NODE) {
2128            Drupal.attachBehaviors(element, settings);
2129          }
2130        });
2131      }
2132    },
2133    remove: function remove(ajax, response, status) {
2134      var settings = response.settings || ajax.settings || drupalSettings;
2135      $(response.selector).each(function () {
2136        Drupal.detachBehaviors(this, settings);
2137      }).remove();
2138    },
2139    changed: function changed(ajax, response, status) {
2140      var $element = $(response.selector);
2141      if (!$element.hasClass('ajax-changed')) {
2142        $element.addClass('ajax-changed');
2143        if (response.asterisk) {
2144          $element.find(response.asterisk).append(' <abbr class="ajax-changed" title="' + Drupal.t('Changed') + '">*</abbr> ');
2145        }
2146      }
2147    },
2148    alert: function alert(ajax, response, status) {
2149      window.alert(response.text, response.title);
2150    },
2151    announce: function announce(ajax, response) {
2152      if (response.priority) {
2153        Drupal.announce(response.text, response.priority);
2154      } else {
2155        Drupal.announce(response.text);
2156      }
2157    },
2158    redirect: function redirect(ajax, response, status) {
2159      window.location = response.url;
2160    },
2161    css: function css(ajax, response, status) {
2162      $(response.selector).css(response.argument);
2163    },
2164    settings: function settings(ajax, response, status) {
2165      var ajaxSettings = drupalSettings.ajax;
2166
2167      if (ajaxSettings) {
2168        Drupal.ajax.expired().forEach(function (instance) {
2169
2170          if (instance.selector) {
2171            var selector = instance.selector.replace('#', '');
2172            if (selector in ajaxSettings) {
2173              delete ajaxSettings[selector];
2174            }
2175          }
2176        });
2177      }
2178
2179      if (response.merge) {
2180        $.extend(true, drupalSettings, response.settings);
2181      } else {
2182        ajax.settings = response.settings;
2183      }
2184    },
2185    data: function data(ajax, response, status) {
2186      $(response.selector).data(response.name, response.value);
2187    },
2188    invoke: function invoke(ajax, response, status) {
2189      var $element = $(response.selector);
2190      $element[response.method].apply($element, _toConsumableArray(response.args));
2191    },
2192    restripe: function restripe(ajax, response, status) {
2193      $(response.selector).find('> tbody > tr:visible, > tr:visible').removeClass('odd even').filter(':even').addClass('odd').end().filter(':odd').addClass('even');
2194    },
2195    update_build_id: function update_build_id(ajax, response, status) {
2196      $('input[name="form_build_id"][value="' + response.old + '"]').val(response.new);
2197    },
2198    add_css: function add_css(ajax, response, status) {
2199      $('head').prepend(response.data);
2200    },
2201    message: function message(ajax, response) {
2202      var messages = new Drupal.Message(document.querySelector(response.messageWrapperQuerySelector));
2203      if (response.clearPrevious) {
2204        messages.clear();
2205      }
2206      messages.add(response.message, response.messageOptions);
2207    }
2208  };
2209})(jQuery, window, Drupal, drupalSettings);;
2210/**
2211 * @file
2212 * Extends methods from core/misc/ajax.js.
2213 */
2214
2215(function ($, window, Drupal, drupalSettings) {
2216
2217  /**
2218   * Attempts to find the closest glyphicon progress indicator.
2219   *
2220   * @param {jQuery|Element} element
2221   *   A DOM element.
2222   *
2223   * @returns {jQuery}
2224   *   A jQuery object.
2225   */
2226  Drupal.Ajax.prototype.findGlyphicon = function (element) {
2227    return $(element).closest('.form-item').find('.ajax-progress.glyphicon')
2228  };
2229
2230  /**
2231   * Starts the spinning of the glyphicon progress indicator.
2232   *
2233   * @param {jQuery|Element} element
2234   *   A DOM element.
2235   * @param {string} [message]
2236   *   An optional message to display (tooltip) for the progress.
2237   *
2238   * @returns {jQuery}
2239   *   A jQuery object.
2240   */
2241  Drupal.Ajax.prototype.glyphiconStart = function (element, message) {
2242    var $glyphicon = this.findGlyphicon(element);
2243    if ($glyphicon[0]) {
2244      $glyphicon.addClass('glyphicon-spin');
2245
2246      // Add any message as a tooltip to the glyphicon.
2247      if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) {
2248        $glyphicon
2249          .removeAttr('data-toggle')
2250          .removeAttr('data-original-title')
2251          .removeAttr('title')
2252          .tooltip('destroy')
2253        ;
2254
2255        if (message) {
2256          $glyphicon.attr('data-toggle', 'tooltip').attr('title', message).tooltip();
2257        }
2258      }
2259
2260      // Append a message for screen readers.
2261      if (message) {
2262        $glyphicon.parent().append('<div class="sr-only message">' + message + '</div>');
2263      }
2264    }
2265    return $glyphicon;
2266  };
2267
2268  /**
2269   * Stop the spinning of a glyphicon progress indicator.
2270   *
2271   * @param {jQuery|Element} element
2272   *   A DOM element.
2273   */
2274  Drupal.Ajax.prototype.glyphiconStop = function (element) {
2275    var $glyphicon = this.findGlyphicon(element);
2276    if ($glyphicon[0]) {
2277      $glyphicon.removeClass('glyphicon-spin');
2278      if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) {
2279        $glyphicon
2280          .removeAttr('data-toggle')
2281          .removeAttr('data-original-title')
2282          .removeAttr('title')
2283          .tooltip('destroy')
2284        ;
2285      }
2286    }
2287  };
2288
2289  /**
2290   * Sets the throbber progress indicator.
2291   */
2292  Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
2293    var $element = $(this.element);
2294
2295    // Find an existing glyphicon progress indicator.
2296    var $glyphicon = this.glyphiconStart($element, this.progress.message);
2297    if ($glyphicon[0]) {
2298      this.progress.element = $glyphicon.parent();
2299      this.progress.glyphicon = true;
2300      return;
2301    }
2302
2303    // Otherwise, add a glyphicon throbber after the element.
2304    if (!this.progress.element) {
2305      this.progress.element = $(Drupal.theme('ajaxThrobber'));
2306    }
2307    if (this.progress.message) {
2308      this.progress.element.after('<div class="message">' + this.progress.message + '</div>');
2309    }
2310
2311    // If element is an input DOM element type (not :input), append after.
2312    if ($element.is('input')) {
2313      $element.after(this.progress.element);
2314    }
2315    // Otherwise append the throbber inside the element.
2316    else {
2317      $element.append(this.progress.element);
2318    }
2319  };
2320
2321
2322  /**
2323   * Handler for the form redirection completion.
2324   *
2325   * @param {Array.<Drupal.AjaxCommands~commandDefinition>} response
2326   * @param {number} status
2327   */
2328  var success = Drupal.Ajax.prototype.success;
2329  Drupal.Ajax.prototype.success = function (response, status) {
2330    if (this.progress.element) {
2331
2332      // Stop a glyphicon throbber.
2333      if (this.progress.glyphicon) {
2334        this.glyphiconStop(this.progress.element);
2335      }
2336      // Remove the progress element.
2337      else {
2338        this.progress.element.remove();
2339      }
2340
2341      // Remove any message set.
2342      this.progress.element.parent().find('.message').remove();
2343    }
2344
2345    // Invoke the original success handler.
2346    return success.apply(this, [response, status]);
2347  };
2348
2349})(jQuery, this, Drupal, drupalSettings);
2350;
2351var packetaReloadFnc;
2352var packetaTout;
2353var packetaCheckTout;
2354
2355jQuery(document).ready(packetaReloadFnc = function() {
2356  clearInterval(packetaTout);
2357  clearInterval(packetaCheckTout);
2358
2359  console.log('Zasilkovna Front 1.0');
2360
2361  window.packetaSelectorOpen = '.packeta-selector-open';
2362  window.packetaSelectorBranchId = '.packeta-selector-branch-id';   
2363  window.packetaSelectorBranchName = '.packeta-selector-branch-name';   
2364       
2365  window.packetaPrimaryButtonColor = '#39b54a';
2366  window.packetaBackgroundColor = '#ffffff';
2367  window.packetaFontColor = '#555555';
2368  window.packetaFontFamily = 'Arial';
2369
2370  var packetaApiKey = window.packetaApiKey;
2371
2372  //var packetaUrl = 'https://widget.packeta.com/www/js/packetaWidget.js';
2373  var packetaUrl = 'https://widget.packeta.com/v6/www/js/library.js'
2374  //packetaUrl = '/modules/commerce_packeta/js/packetaWidget.js';
2375  jQuery('#packeta-widget-api').remove();
2376  jQuery('body').append(jQuery('<script id="packeta-widget-api" src="' + packetaUrl + '" data-api-key="' + packetaApiKey + '"></' + 'script>'));
2377
2378  var path = window.location.pathname;
2379  var pathSplit = path.split('/');
2380
2381  // TODO[hardcoded]: use D8 router
2382  var orderId = pathSplit[2];
2383        
2384  var selectWrappers = jQuery('*[data-select]').addClass('packeta-processed');
2385
2386  var selected = true;
2387
2388  var methods = selectWrappers.closest('.fieldset-wrapper').eq(0);
2389  methods.closest('form').find('[type="submit"][data-drupal-selector="edit-actions-next"]').unbind('mousedown.packeta touchstart.packeta keydown.packeta').on('mousedown.packeta touchstart.packeta keydown.packeta', function(event) {
2390    var val = selectWrappers.find('select').val().trim();
2391    if (selected && !val) {
2392      alert(window.packetaSelectBranch);
2393      event.stopPropagation();
2394      event.preventDefault();
2395      return false;
2396    }
2397  });
2398
2399  methods.find('.form-item input').unbind('click.packeta').bind('click.packeta', function() {
2400    if (!jQuery(this).hasClass('packetery') && selected) {
2401      selected = false;
2402
2403      var data = {
2404        order: orderId
2405      }
2406
2407      jQuery('#edit-actions-next').addClass('zasilkovna_disabled');
2408
2409      jQuery.get('/commerce-zasilkovna/selectBranch', data, function() {
2410        jQuery('#edit-actions-next').removeClass('zasilkovna_disabled');
2411      });
2412    }
2413  });
2414
2415  var notCheckedCount = 0;
2416  selectWrappers.each(function() {
2417    var selectWrapper = jQuery(this);
2418
2419    var packetery = selectWrapper.closest('.form-item');
2420    var packeteryInput = packetery.find('input').addClass('packetery');
2421    if (!packeteryInput.is(':checked')) {
2422      notCheckedCount++;
2423    }
2424
2425    selectHtml = selectWrapper.data('select');
2426    //selectWrapper.removeAttr('data-select');
2427    var textArea = document.createElement('textarea');
2428    textArea.innerHTML = selectHtml;
2429    selectWrapper.html(textArea.value); 
2430
2431    var select = selectWrapper.find('select');
2432    select.unbind('change.packeta').bind('change.packeta', function() {
2433      if (packeteryInput.is(':checked')) {
2434        selected = true;
2435
2436        var id = select.val();
2437
2438        var name = select.find('option[value="' + id + '"]').text();
2439        var data = {
2440          order: orderId,
2441          id: id,
2442          name: name
2443        }
2444
2445        jQuery('#edit-actions-next').addClass('zasilkovna_disabled');
2446
2447        jQuery.get('/commerce-zasilkovna/selectBranch', data, function() {
2448          jQuery('#edit-actions-next').removeClass('zasilkovna_disabled');
2449        });
2450      }
2451
2452    });
2453
2454    var currentBranchId = null;
2455    packetaTout = setInterval(function() {
2456      
2457      var branchId = jQuery(window.packetaSelectorBranchId).eq(0).text();
2458      var branchName = jQuery(window.packetaSelectorBranchName).eq(0).text();
2459      
2460      if (branchId && (currentBranchId != branchId)) {
2461        currentBranchId = branchId;
2462
2463        console.log('Zasilkovna ID: ' + currentBranchId);
2464        console.log('Zasilkovna name: ' + branchName);
2465
2466        select.find('option.zasilkovna_branch').remove();
2467        select.append(jQuery('<option/>').addClass('zasilkovna_branch').val(branchId).text(branchName.replace('Z-BOX,', '')));
2468        select.val(branchId).trigger('change');
2469      }
2470    }, 10);
2471
2472    
2473    packeteryInput.unbind('click.packeta').bind('click.packeta', function() {
2474
2475      const packetaOptions = {
2476        language: "cs", 
2477        valueFormat: "place,name", 
2478        view: "modal"
2479      };
2480
2481      function showSelectedPickupPoint(point) {
2482        console.log(point);
2483        if (point && point.id) {
2484          jQuery(window.packetaSelectorBranchId).eq(0).text(point.id);
2485          jQuery(window.packetaSelectorBranchName).eq(0).text(point.formatedValue);
2486        }
2487      }
2488      
2489      Packeta.Widget.pick(window.packetaApiKey, showSelectedPickupPoint, packetaOptions);
2490      
2491      //jQuery(window.packetaSelectorOpen).click();
2492      select.triggerHandler('change');
2493    });
2494  });
2495
2496  if (selectWrappers.length) {
2497    if (notCheckedCount >= selectWrappers.length) {
2498        selected = false;
2499
2500        var data = {
2501          order: orderId
2502        }
2503
2504        jQuery('#edit-actions-next').addClass('zasilkovna_disabled');
2505
2506        jQuery.get('/commerce-zasilkovna/selectBranch', data, function() {
2507          jQuery('#edit-actions-next').removeClass('zasilkovna_disabled');
2508        });
2509      }
2510
2511      packetaCheckTout = setInterval(function() {
2512      if (!jQuery('*[data-select].packeta-processed').length) {
2513        packetaReloadFnc();
2514      }
2515
2516    }, 10);
2517  }
2518});;
2519/**
2520 * @file
2521 * Attaches several event listener to a web page.
2522 */
2523
2524(function ($, Drupal, drupalSettings) {
2525
2526  /* eslint max-nested-callbacks: ["error", 4] */
2527
2528  'use strict';
2529
2530  Drupal.google_analytics = {};
2531
2532  $(document).ready(function () {
2533
2534    // Attach mousedown, keyup, touchstart events to document only and catch
2535    // clicks on all elements.
2536    $(document.body).on('mousedown keyup touchstart', function (event) {
2537
2538      // Catch the closest surrounding link of a clicked element.
2539      $(event.target).closest('a,area').each(function () {
2540
2541        // Is the clicked URL internal?
2542        if (Drupal.google_analytics.isInternal(this.href)) {
2543          // Skip 'click' tracking, if custom tracking events are bound.
2544          if ($(this).is('.colorbox') && (drupalSettings.google_analytics.trackColorbox)) {
2545            // Do nothing here. The custom event will handle all tracking.
2546            // console.info('Click on .colorbox item has been detected.');
2547          }
2548          // Is download tracking activated and the file extension configured
2549          // for download tracking?
2550          else if (drupalSettings.google_analytics.trackDownload && Drupal.google_analytics.isDownload(this.href)) {
2551            // Download link clicked.
2552            gtag('event', Drupal.google_analytics.getDownloadExtension(this.href).toUpperCase(), {
2553              event_category: 'Downloads',
2554              event_label: Drupal.google_analytics.getPageUrl(this.href),
2555              transport_type: 'beacon'
2556            });
2557          }
2558          else if (Drupal.google_analytics.isInternalSpecial(this.href)) {
2559            // Keep the internal URL for Google Analytics website overlay intact.
2560            // @todo: May require tracking ID
2561            gtag('config', drupalSettings.google_analytics.account, {
2562              page_path: Drupal.google_analytics.getPageUrl(this.href),
2563              transport_type: 'beacon'
2564            });
2565          }
2566        }
2567        else {
2568          if (drupalSettings.google_analytics.trackMailto && $(this).is("a[href^='mailto:'],area[href^='mailto:']")) {
2569            // Mailto link clicked.
2570            gtag('event', 'Click', {
2571              event_category: 'Mails',
2572              event_label: this.href.substring(7),
2573              transport_type: 'beacon'
2574            });
2575          }
2576          else if (drupalSettings.google_analytics.trackOutbound && this.href.match(/^\w+:\/\//i)) {
2577            if (drupalSettings.google_analytics.trackDomainMode !== 2 || (drupalSettings.google_analytics.trackDomainMode === 2 && !Drupal.google_analytics.isCrossDomain(this.hostname, drupalSettings.google_analytics.trackCrossDomains))) {
2578              // External link clicked / No top-level cross domain clicked.
2579              gtag('event', 'Click', {
2580                event_category: 'Outbound links',
2581                event_label: this.href,
2582                transport_type: 'beacon'
2583              });
2584            }
2585          }
2586        }
2587      });
2588    });
2589
2590    // Track hash changes as unique pageviews, if this option has been enabled.
2591    if (drupalSettings.google_analytics.trackUrlFragments) {
2592      window.onhashchange = function () {
2593        gtag('config', drupalSettings.google_analytics.account, {
2594          page_path: location.pathname + location.search + location.hash
2595        });
2596      };
2597    }
2598
2599    // Colorbox: This event triggers when the transition has completed and the
2600    // newly loaded content has been revealed.
2601    if (drupalSettings.google_analytics.trackColorbox) {
2602      $(document).on('cbox_complete', function () {
2603        var href = $.colorbox.element().attr('href');
2604        if (href) {
2605          gtag('config', drupalSettings.google_analytics.account, {
2606            page_path: Drupal.google_analytics.getPageUrl(href)
2607          });
2608        }
2609      });
2610    }
2611
2612  });
2613
2614  /**
2615   * Check whether the hostname is part of the cross domains or not.
2616   *
2617   * @param {string} hostname
2618   *   The hostname of the clicked URL.
2619   * @param {array} crossDomains
2620   *   All cross domain hostnames as JS array.
2621   *
2622   * @return {boolean} isCrossDomain
2623   */
2624  Drupal.google_analytics.isCrossDomain = function (hostname, crossDomains) {
2625    return $.inArray(hostname, crossDomains) > -1 ? true : false;
2626  };
2627
2628  /**
2629   * Check whether this is a download URL or not.
2630   *
2631   * @param {string} url
2632   *   The web url to check.
2633   *
2634   * @return {boolean} isDownload
2635   */
2636  Drupal.google_analytics.isDownload = function (url) {
2637    var isDownload = new RegExp('\\.(' + drupalSettings.google_analytics.trackDownloadExtensions + ')([\?#].*)?$', 'i');
2638    return isDownload.test(url);
2639  };
2640
2641  /**
2642   * Check whether this is an absolute internal URL or not.
2643   *
2644   * @param {string} url
2645   *   The web url to check.
2646   *
2647   * @return {boolean} isInternal
2648   */
2649  Drupal.google_analytics.isInternal = function (url) {
2650    var isInternal = new RegExp('^(https?):\/\/' + window.location.host, 'i');
2651    return isInternal.test(url);
2652  };
2653
2654  /**
2655   * Check whether this is a special URL or not.
2656   *
2657   * URL types:
2658   *  - gotwo.module /go/* links.
2659   *
2660   * @param {string} url
2661   *   The web url to check.
2662   *
2663   * @return {boolean} isInternalSpecial
2664   */
2665  Drupal.google_analytics.isInternalSpecial = function (url) {
2666    var isInternalSpecial = new RegExp('(\/go\/.*)$', 'i');
2667    return isInternalSpecial.test(url);
2668  };
2669
2670  /**
2671   * Extract the relative internal URL from an absolute internal URL.
2672   *
2673   * Examples:
2674   * - https://mydomain.com/node/1 -> /node/1
2675   * - https://example.com/foo/bar -> https://example.com/foo/bar
2676   *
2677   * @param {string} url
2678   *   The web url to check.
2679   *
2680   * @return {string} getPageUrl
2681   *   Internal website URL.
2682   */
2683  Drupal.google_analytics.getPageUrl = function (url) {
2684    var extractInternalUrl = new RegExp('^(https?):\/\/' + window.location.host, 'i');
2685    return url.replace(extractInternalUrl, '');
2686  };
2687
2688  /**
2689   * Extract the download file extension from the URL.
2690   *
2691   * @param {string} url
2692   *   The web url to check.
2693   *
2694   * @return {string} getDownloadExtension
2695   *   The file extension of the passed url. e.g. 'zip', 'txt'
2696   */
2697  Drupal.google_analytics.getDownloadExtension = function (url) {
2698    var extractDownloadextension = new RegExp('\\.(' + drupalSettings.google_analytics.trackDownloadExtensions + ')([\?#].*)?$', 'i');
2699    var extension = extractDownloadextension.exec(url);
2700    return (extension === null) ? '' : extension[1];
2701  };
2702
2703})(jQuery, Drupal, drupalSettings);
2704;
2705/**
2706 * @file
2707 * Belgrade Theme JS.
2708 */
2709(function ($) {
2710
2711    'use strict';
2712
2713    /**
2714     * Close behaviour.
2715     */
2716    Drupal.behaviors.closeCartblockcontents = {
2717      attach: function (context, settings) {
2718        $('.cart-block--contents .close-btn').click(function() {
2719          $(this).parent().removeClass('cart-block--contents__expanded');
2720        });
2721      }
2722    };
2723
2724  })(jQuery);
2725;
2726/* ========================================================================
2727 * Bootstrap: affix.js v3.3.7
2728 * http://getbootstrap.com/javascript/#affix
2729 * ========================================================================
2730 * Copyright 2011-2016 Twitter, Inc.
2731 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2732 * ======================================================================== */
2733
2734
2735+function ($) {
2736  'use strict';
2737
2738  // AFFIX CLASS DEFINITION
2739  // ======================
2740
2741  var Affix = function (element, options) {
2742    this.options = $.extend({}, Affix.DEFAULTS, options)
2743
2744    this.$target = $(this.options.target)
2745      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
2746      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
2747
2748    this.$element     = $(element)
2749    this.affixed      = null
2750    this.unpin        = null
2751    this.pinnedOffset = null
2752
2753    this.checkPosition()
2754  }
2755
2756  Affix.VERSION  = '3.3.7'
2757
2758  Affix.RESET    = 'affix affix-top affix-bottom'
2759
2760  Affix.DEFAULTS = {
2761    offset: 0,
2762    target: window
2763  }
2764
2765  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
2766    var scrollTop    = this.$target.scrollTop()
2767    var position     = this.$element.offset()
2768    var targetHeight = this.$target.height()
2769
2770    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
2771
2772    if (this.affixed == 'bottom') {
2773      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
2774      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
2775    }
2776
2777    var initializing   = this.affixed == null
2778    var colliderTop    = initializing ? scrollTop : position.top
2779    var colliderHeight = initializing ? targetHeight : height
2780
2781    if (offsetTop != null && scrollTop <= offsetTop) return 'top'
2782    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
2783
2784    return false
2785  }
2786
2787  Affix.prototype.getPinnedOffset = function () {
2788    if (this.pinnedOffset) return this.pinnedOffset
2789    this.$element.removeClass(Affix.RESET).addClass('affix')
2790    var scrollTop = this.$target.scrollTop()
2791    var position  = this.$element.offset()
2792    return (this.pinnedOffset = position.top - scrollTop)
2793  }
2794
2795  Affix.prototype.checkPositionWithEventLoop = function () {
2796    setTimeout($.proxy(this.checkPosition, this), 1)
2797  }
2798
2799  Affix.prototype.checkPosition = function () {
2800    if (!this.$element.is(':visible')) return
2801
2802    var height       = this.$element.height()
2803    var offset       = this.options.offset
2804    var offsetTop    = offset.top
2805    var offsetBottom = offset.bottom
2806    var scrollHeight = Math.max($(document).height(), $(document.body).height())
2807
2808    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
2809    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
2810    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2811
vendor: 12,427 bytes, lines 2812-3253
2812    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
2813
2814    if (this.affixed != affix) {
2815      if (this.unpin != null) this.$element.css('top', '')
2816
2817      var affixType = 'affix' + (affix ? '-' + affix : '')
2818      var e         = $.Event(affixType + '.bs.affix')
2819
2820      this.$element.trigger(e)
2821
2822      if (e.isDefaultPrevented()) return
2823
2824      this.affixed = affix
2825      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
2826
2827      this.$element
2828        .removeClass(Affix.RESET)
2829        .addClass(affixType)
2830        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
2831    }
2832
2833    if (affix == 'bottom') {
2834      this.$element.offset({
2835        top: scrollHeight - height - offsetBottom
2836      })
2837    }
2838  }
2839
2840
2841  // AFFIX PLUGIN DEFINITION
2842  // =======================
2843
2844  function Plugin(option) {
2845    return this.each(function () {
2846      var $this   = $(this)
2847      var data    = $this.data('bs.affix')
2848      var options = typeof option == 'object' && option
2849
2850      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2851      if (typeof option == 'string') data[option]()
2852    })
2853  }
2854
2855  var old = $.fn.affix
2856
2857  $.fn.affix             = Plugin
2858  $.fn.affix.Constructor = Affix
2859
2860
2861  // AFFIX NO CONFLICT
2862  // =================
2863
2864  $.fn.affix.noConflict = function () {
2865    $.fn.affix = old
2866    return this
2867  }
2868
2869
2870  // AFFIX DATA-API
2871  // ==============
2872
2873  $(window).on('load', function () {
2874    $('[data-spy="affix"]').each(function () {
2875      var $spy = $(this)
2876      var data = $spy.data()
2877
2878      data.offset = data.offset || {}
2879
2880      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
2881      if (data.offsetTop    != null) data.offset.top    = data.offsetTop
2882
2883      Plugin.call($spy, data)
2884    })
2885  })
2886
2887}(jQuery);
2888;
2889/* ========================================================================
2890 * Bootstrap: alert.js v3.3.7
2891 * http://getbootstrap.com/javascript/#alerts
2892 * ========================================================================
2893 * Copyright 2011-2016 Twitter, Inc.
2894 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2895 * ======================================================================== */
2896
2897
2898+function ($) {
2899  'use strict';
2900
2901  // ALERT CLASS DEFINITION
2902  // ======================
2903
2904  var dismiss = '[data-dismiss="alert"]'
2905  var Alert   = function (el) {
2906    $(el).on('click', dismiss, this.close)
2907  }
2908
2909  Alert.VERSION = '3.3.7'
2910
2911  Alert.TRANSITION_DURATION = 150
2912
2913  Alert.prototype.close = function (e) {
2914    var $this    = $(this)
2915    var selector = $this.attr('data-target')
2916
2917    if (!selector) {
2918      selector = $this.attr('href')
2919      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
2920    }
2921
2922    var $parent = $(selector === '#' ? [] : selector)
2923
2924    if (e) e.preventDefault()
2925
2926    if (!$parent.length) {
2927      $parent = $this.closest('.alert')
2928    }
2929
2930    $parent.trigger(e = $.Event('close.bs.alert'))
2931
2932    if (e.isDefaultPrevented()) return
2933
2934    $parent.removeClass('in')
2935
2936    function removeElement() {
2937      // detach from parent, fire event then clean up data
2938      $parent.detach().trigger('closed.bs.alert').remove()
2939    }
2940
2941    $.support.transition && $parent.hasClass('fade') ?
2942      $parent
2943        .one('bsTransitionEnd', removeElement)
2944        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
2945      removeElement()
2946  }
2947
2948
2949  // ALERT PLUGIN DEFINITION
2950  // =======================
2951
2952  function Plugin(option) {
2953    return this.each(function () {
2954      var $this = $(this)
2955      var data  = $this.data('bs.alert')
2956
2957      if (!data) $this.data('bs.alert', (data = new Alert(this)))
2958      if (typeof option == 'string') data[option].call($this)
2959    })
2960  }
2961
2962  var old = $.fn.alert
2963
2964  $.fn.alert             = Plugin
2965  $.fn.alert.Constructor = Alert
2966
2967
2968  // ALERT NO CONFLICT
2969  // =================
2970
2971  $.fn.alert.noConflict = function () {
2972    $.fn.alert = old
2973    return this
2974  }
2975
2976
2977  // ALERT DATA-API
2978  // ==============
2979
2980  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
2981
2982}(jQuery);
2983;
2984/* ========================================================================
2985 * Bootstrap: button.js v3.3.7
2986 * http://getbootstrap.com/javascript/#buttons
2987 * ========================================================================
2988 * Copyright 2011-2016 Twitter, Inc.
2989 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2990 * ======================================================================== */
2991
2992
2993+function ($) {
2994  'use strict';
2995
2996  // BUTTON PUBLIC CLASS DEFINITION
2997  // ==============================
2998
2999  var Button = function (element, options) {
3000    this.$element  = $(element)
3001    this.options   = $.extend({}, Button.DEFAULTS, options)
3002    this.isLoading = false
3003  }
3004
3005  Button.VERSION  = '3.3.7'
3006
3007  Button.DEFAULTS = {
3008    loadingText: 'loading...'
3009  }
3010
3011  Button.prototype.setState = function (state) {
3012    var d    = 'disabled'
3013    var $el  = this.$element
3014    var val  = $el.is('input') ? 'val' : 'html'
3015    var data = $el.data()
3016
3017    state += 'Text'
3018
3019    if (data.resetText == null) $el.data('resetText', $el[val]())
3020
3021    // push to event loop to allow forms to submit
3022    setTimeout($.proxy(function () {
3023      $el[val](data[state] == null ? this.options[state] : data[state])
3024
3025      if (state == 'loadingText') {
3026        this.isLoading = true
3027        $el.addClass(d).attr(d, d).prop(d, true)
3028      } else if (this.isLoading) {
3029        this.isLoading = false
3030        $el.removeClass(d).removeAttr(d).prop(d, false)
3031      }
3032    }, this), 0)
3033  }
3034
3035  Button.prototype.toggle = function () {
3036    var changed = true
3037    var $parent = this.$element.closest('[data-toggle="buttons"]')
3038
3039    if ($parent.length) {
3040      var $input = this.$element.find('input')
3041      if ($input.prop('type') == 'radio') {
3042        if ($input.prop('checked')) changed = false
3043        $parent.find('.active').removeClass('active')
3044        this.$element.addClass('active')
3045      } else if ($input.prop('type') == 'checkbox') {
3046        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
3047        this.$element.toggleClass('active')
3048      }
3049      $input.prop('checked', this.$element.hasClass('active'))
3050      if (changed) $input.trigger('change')
3051    } else {
3052      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
3053      this.$element.toggleClass('active')
3054    }
3055  }
3056
3057
3058  // BUTTON PLUGIN DEFINITION
3059  // ========================
3060
3061  function Plugin(option) {
3062    return this.each(function () {
3063      var $this   = $(this)
3064      var data    = $this.data('bs.button')
3065      var options = typeof option == 'object' && option
3066
3067      if (!data) $this.data('bs.button', (data = new Button(this, options)))
3068
3069      if (option == 'toggle') data.toggle()
3070      else if (option) data.setState(option)
3071    })
3072  }
3073
3074  var old = $.fn.button
3075
3076  $.fn.button             = Plugin
3077  $.fn.button.Constructor = Button
3078
3079
3080  // BUTTON NO CONFLICT
3081  // ==================
3082
3083  $.fn.button.noConflict = function () {
3084    $.fn.button = old
3085    return this
3086  }
3087
3088
3089  // BUTTON DATA-API
3090  // ===============
3091
3092  $(document)
3093    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
3094      var $btn = $(e.target).closest('.btn')
3095      Plugin.call($btn, 'toggle')
3096      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
3097        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
3098        e.preventDefault()
3099        // The target component still receive the focus
3100        if ($btn.is('input,button')) $btn.trigger('focus')
3101        else $btn.find('input:visible,button:visible').first().trigger('focus')
3102      }
3103    })
3104    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
3105      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
3106    })
3107
3108}(jQuery);
3109;
3110/* ========================================================================
3111 * Bootstrap: carousel.js v3.3.7
3112 * http://getbootstrap.com/javascript/#carousel
3113 * ========================================================================
3114 * Copyright 2011-2016 Twitter, Inc.
3115 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3116 * ======================================================================== */
3117
3118
3119+function ($) {
3120  'use strict';
3121
3122  // CAROUSEL CLASS DEFINITION
3123  // =========================
3124
3125  var Carousel = function (element, options) {
3126    this.$element    = $(element)
3127    this.$indicators = this.$element.find('.carousel-indicators')
3128    this.options     = options
3129    this.paused      = null
3130    this.sliding     = null
3131    this.interval    = null
3132    this.$active     = null
3133    this.$items      = null
3134
3135    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
3136
3137    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
3138      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
3139      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
3140  }
3141
3142  Carousel.VERSION  = '3.3.7'
3143
3144  Carousel.TRANSITION_DURATION = 600
3145
3146  Carousel.DEFAULTS = {
3147    interval: 5000,
3148    pause: 'hover',
3149    wrap: true,
3150    keyboard: true
3151  }
3152
3153  Carousel.prototype.keydown = function (e) {
3154    if (/input|textarea/i.test(e.target.tagName)) return
3155    switch (e.which) {
3156      case 37: this.prev(); break
3157      case 39: this.next(); break
3158      default: return
3159    }
3160
3161    e.preventDefault()
3162  }
3163
3164  Carousel.prototype.cycle = function (e) {
3165    e || (this.paused = false)
3166
3167    this.interval && clearInterval(this.interval)
3168
3169    this.options.interval
3170      && !this.paused
3171      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
3172
3173    return this
3174  }
3175
3176  Carousel.prototype.getItemIndex = function (item) {
3177    this.$items = item.parent().children('.item')
3178    return this.$items.index(item || this.$active)
3179  }
3180
3181  Carousel.prototype.getItemForDirection = function (direction, active) {
3182    var activeIndex = this.getItemIndex(active)
3183    var willWrap = (direction == 'prev' && activeIndex === 0)
3184                || (direction == 'next' && activeIndex == (this.$items.length - 1))
3185    if (willWrap && !this.options.wrap) return active
3186    var delta = direction == 'prev' ? -1 : 1
3187    var itemIndex = (activeIndex + delta) % this.$items.length
3188    return this.$items.eq(itemIndex)
3189  }
3190
3191  Carousel.prototype.to = function (pos) {
3192    var that        = this
3193    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
3194
3195    if (pos > (this.$items.length - 1) || pos < 0) return
3196
3197    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
3198    if (activeIndex == pos) return this.pause().cycle()
3199
3200    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
3201  }
3202
3203  Carousel.prototype.pause = function (e) {
3204    e || (this.paused = true)
3205
3206    if (this.$element.find('.next, .prev').length && $.support.transition) {
3207      this.$element.trigger($.support.transition.end)
3208      this.cycle(true)
3209    }
3210
3211    this.interval = clearInterval(this.interval)
3212
3213    return this
3214  }
3215
3216  Carousel.prototype.next = function () {
3217    if (this.sliding) return
3218    return this.slide('next')
3219  }
3220
3221  Carousel.prototype.prev = function () {
3222    if (this.sliding) return
3223    return this.slide('prev')
3224  }
3225
3226  Carousel.prototype.slide = function (type, next) {
3227    var $active   = this.$element.find('.item.active')
3228    var $next     = next || this.getItemForDirection(type, $active)
3229    var isCycling = this.interval
3230    var direction = type == 'next' ? 'left' : 'right'
3231    var that      = this
3232
3233    if ($next.hasClass('active')) return (this.sliding = false)
3234
3235    var relatedTarget = $next[0]
3236    var slideEvent = $.Event('slide.bs.carousel', {
3237      relatedTarget: relatedTarget,
3238      direction: direction
3239    })
3240    this.$element.trigger(slideEvent)
3241    if (slideEvent.isDefaultPrevented()) return
3242
3243    this.sliding = true
3244
3245    isCycling && this.pause()
3246
3247    if (this.$indicators.length) {
3248      this.$indicators.find('.active').removeClass('active')
3249      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
3250      $nextIndicator && $nextIndicator.addClass('active')
3251    }
3252
3253    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
vendor: 27,148 bytes, lines 3254-4185
3254    if ($.support.transition && this.$element.hasClass('slide')) {
3255      $next.addClass(type)
3256      $next[0].offsetWidth // force reflow
3257      $active.addClass(direction)
3258      $next.addClass(direction)
3259      $active
3260        .one('bsTransitionEnd', function () {
3261          $next.removeClass([type, direction].join(' ')).addClass('active')
3262          $active.removeClass(['active', direction].join(' '))
3263          that.sliding = false
3264          setTimeout(function () {
3265            that.$element.trigger(slidEvent)
3266          }, 0)
3267        })
3268        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
3269    } else {
3270      $active.removeClass('active')
3271      $next.addClass('active')
3272      this.sliding = false
3273      this.$element.trigger(slidEvent)
3274    }
3275
3276    isCycling && this.cycle()
3277
3278    return this
3279  }
3280
3281
3282  // CAROUSEL PLUGIN DEFINITION
3283  // ==========================
3284
3285  function Plugin(option) {
3286    return this.each(function () {
3287      var $this   = $(this)
3288      var data    = $this.data('bs.carousel')
3289      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
3290      var action  = typeof option == 'string' ? option : options.slide
3291
3292      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
3293      if (typeof option == 'number') data.to(option)
3294      else if (action) data[action]()
3295      else if (options.interval) data.pause().cycle()
3296    })
3297  }
3298
3299  var old = $.fn.carousel
3300
3301  $.fn.carousel             = Plugin
3302  $.fn.carousel.Constructor = Carousel
3303
3304
3305  // CAROUSEL NO CONFLICT
3306  // ====================
3307
3308  $.fn.carousel.noConflict = function () {
3309    $.fn.carousel = old
3310    return this
3311  }
3312
3313
3314  // CAROUSEL DATA-API
3315  // =================
3316
3317  var clickHandler = function (e) {
3318    var href
3319    var $this   = $(this)
3320    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
3321    if (!$target.hasClass('carousel')) return
3322    var options = $.extend({}, $target.data(), $this.data())
3323    var slideIndex = $this.attr('data-slide-to')
3324    if (slideIndex) options.interval = false
3325
3326    Plugin.call($target, options)
3327
3328    if (slideIndex) {
3329      $target.data('bs.carousel').to(slideIndex)
3330    }
3331
3332    e.preventDefault()
3333  }
3334
3335  $(document)
3336    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
3337    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
3338
3339  $(window).on('load', function () {
3340    $('[data-ride="carousel"]').each(function () {
3341      var $carousel = $(this)
3342      Plugin.call($carousel, $carousel.data())
3343    })
3344  })
3345
3346}(jQuery);
3347;
3348/* ========================================================================
3349 * Bootstrap: collapse.js v3.3.7
3350 * http://getbootstrap.com/javascript/#collapse
3351 * ========================================================================
3352 * Copyright 2011-2016 Twitter, Inc.
3353 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3354 * ======================================================================== */
3355
3356/* jshint latedef: false */
3357
3358+function ($) {
3359  'use strict';
3360
3361  // COLLAPSE PUBLIC CLASS DEFINITION
3362  // ================================
3363
3364  var Collapse = function (element, options) {
3365    this.$element      = $(element)
3366    this.options       = $.extend({}, Collapse.DEFAULTS, options)
3367    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
3368                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')
3369    this.transitioning = null
3370
3371    if (this.options.parent) {
3372      this.$parent = this.getParent()
3373    } else {
3374      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
3375    }
3376
3377    if (this.options.toggle) this.toggle()
3378  }
3379
3380  Collapse.VERSION  = '3.3.7'
3381
3382  Collapse.TRANSITION_DURATION = 350
3383
3384  Collapse.DEFAULTS = {
3385    toggle: true
3386  }
3387
3388  Collapse.prototype.dimension = function () {
3389    var hasWidth = this.$element.hasClass('width')
3390    return hasWidth ? 'width' : 'height'
3391  }
3392
3393  Collapse.prototype.show = function () {
3394    if (this.transitioning || this.$element.hasClass('in')) return
3395
3396    var activesData
3397    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
3398
3399    if (actives && actives.length) {
3400      activesData = actives.data('bs.collapse')
3401      if (activesData && activesData.transitioning) return
3402    }
3403
3404    var startEvent = $.Event('show.bs.collapse')
3405    this.$element.trigger(startEvent)
3406    if (startEvent.isDefaultPrevented()) return
3407
3408    if (actives && actives.length) {
3409      Plugin.call(actives, 'hide')
3410      activesData || actives.data('bs.collapse', null)
3411    }
3412
3413    var dimension = this.dimension()
3414
3415    this.$element
3416      .removeClass('collapse')
3417      .addClass('collapsing')[dimension](0)
3418      .attr('aria-expanded', true)
3419
3420    this.$trigger
3421      .removeClass('collapsed')
3422      .attr('aria-expanded', true)
3423
3424    this.transitioning = 1
3425
3426    var complete = function () {
3427      this.$element
3428        .removeClass('collapsing')
3429        .addClass('collapse in')[dimension]('')
3430      this.transitioning = 0
3431      this.$element
3432        .trigger('shown.bs.collapse')
3433    }
3434
3435    if (!$.support.transition) return complete.call(this)
3436
3437    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
3438
3439    this.$element
3440      .one('bsTransitionEnd', $.proxy(complete, this))
3441      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
3442  }
3443
3444  Collapse.prototype.hide = function () {
3445    if (this.transitioning || !this.$element.hasClass('in')) return
3446
3447    var startEvent = $.Event('hide.bs.collapse')
3448    this.$element.trigger(startEvent)
3449    if (startEvent.isDefaultPrevented()) return
3450
3451    var dimension = this.dimension()
3452
3453    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
3454
3455    this.$element
3456      .addClass('collapsing')
3457      .removeClass('collapse in')
3458      .attr('aria-expanded', false)
3459
3460    this.$trigger
3461      .addClass('collapsed')
3462      .attr('aria-expanded', false)
3463
3464    this.transitioning = 1
3465
3466    var complete = function () {
3467      this.transitioning = 0
3468      this.$element
3469        .removeClass('collapsing')
3470        .addClass('collapse')
3471        .trigger('hidden.bs.collapse')
3472    }
3473
3474    if (!$.support.transition) return complete.call(this)
3475
3476    this.$element
3477      [dimension](0)
3478      .one('bsTransitionEnd', $.proxy(complete, this))
3479      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
3480  }
3481
3482  Collapse.prototype.toggle = function () {
3483    this[this.$element.hasClass('in') ? 'hide' : 'show']()
3484  }
3485
3486  Collapse.prototype.getParent = function () {
3487    return $(this.options.parent)
3488      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
3489      .each($.proxy(function (i, element) {
3490        var $element = $(element)
3491        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
3492      }, this))
3493      .end()
3494  }
3495
3496  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
3497    var isOpen = $element.hasClass('in')
3498
3499    $element.attr('aria-expanded', isOpen)
3500    $trigger
3501      .toggleClass('collapsed', !isOpen)
3502      .attr('aria-expanded', isOpen)
3503  }
3504
3505  function getTargetFromTrigger($trigger) {
3506    var href
3507    var target = $trigger.attr('data-target')
3508      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
3509
3510    return $(target)
3511  }
3512
3513
3514  // COLLAPSE PLUGIN DEFINITION
3515  // ==========================
3516
3517  function Plugin(option) {
3518    return this.each(function () {
3519      var $this   = $(this)
3520      var data    = $this.data('bs.collapse')
3521      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
3522
3523      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
3524      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
3525      if (typeof option == 'string') data[option]()
3526    })
3527  }
3528
3529  var old = $.fn.collapse
3530
3531  $.fn.collapse             = Plugin
3532  $.fn.collapse.Constructor = Collapse
3533
3534
3535  // COLLAPSE NO CONFLICT
3536  // ====================
3537
3538  $.fn.collapse.noConflict = function () {
3539    $.fn.collapse = old
3540    return this
3541  }
3542
3543
3544  // COLLAPSE DATA-API
3545  // =================
3546
3547  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
3548    var $this   = $(this)
3549
3550    if (!$this.attr('data-target')) e.preventDefault()
3551
3552    var $target = getTargetFromTrigger($this)
3553    var data    = $target.data('bs.collapse')
3554    var option  = data ? 'toggle' : $this.data()
3555
3556    Plugin.call($target, option)
3557  })
3558
3559}(jQuery);
3560;
3561/* ========================================================================
3562 * Bootstrap: dropdown.js v3.3.7
3563 * http://getbootstrap.com/javascript/#dropdowns
3564 * ========================================================================
3565 * Copyright 2011-2016 Twitter, Inc.
3566 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3567 * ======================================================================== */
3568
3569
3570+function ($) {
3571  'use strict';
3572
3573  // DROPDOWN CLASS DEFINITION
3574  // =========================
3575
3576  var backdrop = '.dropdown-backdrop'
3577  var toggle   = '[data-toggle="dropdown"]'
3578  var Dropdown = function (element) {
3579    $(element).on('click.bs.dropdown', this.toggle)
3580  }
3581
3582  Dropdown.VERSION = '3.3.7'
3583
3584  function getParent($this) {
3585    var selector = $this.attr('data-target')
3586
3587    if (!selector) {
3588      selector = $this.attr('href')
3589      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
3590    }
3591
3592    var $parent = selector && $(selector)
3593
3594    return $parent && $parent.length ? $parent : $this.parent()
3595  }
3596
3597  function clearMenus(e) {
3598    if (e && e.which === 3) return
3599    $(backdrop).remove()
3600    $(toggle).each(function () {
3601      var $this         = $(this)
3602      var $parent       = getParent($this)
3603      var relatedTarget = { relatedTarget: this }
3604
3605      if (!$parent.hasClass('open')) return
3606
3607      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
3608
3609      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
3610
3611      if (e.isDefaultPrevented()) return
3612
3613      $this.attr('aria-expanded', 'false')
3614      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
3615    })
3616  }
3617
3618  Dropdown.prototype.toggle = function (e) {
3619    var $this = $(this)
3620
3621    if ($this.is('.disabled, :disabled')) return
3622
3623    var $parent  = getParent($this)
3624    var isActive = $parent.hasClass('open')
3625
3626    clearMenus()
3627
3628    if (!isActive) {
3629      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
3630        // if mobile we use a backdrop because click events don't delegate
3631        $(document.createElement('div'))
3632          .addClass('dropdown-backdrop')
3633          .insertAfter($(this))
3634          .on('click', clearMenus)
3635      }
3636
3637      var relatedTarget = { relatedTarget: this }
3638      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
3639
3640      if (e.isDefaultPrevented()) return
3641
3642      $this
3643        .trigger('focus')
3644        .attr('aria-expanded', 'true')
3645
3646      $parent
3647        .toggleClass('open')
3648        .trigger($.Event('shown.bs.dropdown', relatedTarget))
3649    }
3650
3651    return false
3652  }
3653
3654  Dropdown.prototype.keydown = function (e) {
3655    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
3656
3657    var $this = $(this)
3658
3659    e.preventDefault()
3660    e.stopPropagation()
3661
3662    if ($this.is('.disabled, :disabled')) return
3663
3664    var $parent  = getParent($this)
3665    var isActive = $parent.hasClass('open')
3666
3667    if (!isActive && e.which != 27 || isActive && e.which == 27) {
3668      if (e.which == 27) $parent.find(toggle).trigger('focus')
3669      return $this.trigger('click')
3670    }
3671
3672    var desc = ' li:not(.disabled):visible a'
3673    var $items = $parent.find('.dropdown-menu' + desc)
3674
3675    if (!$items.length) return
3676
3677    var index = $items.index(e.target)
3678
3679    if (e.which == 38 && index > 0)                 index--         // up
3680    if (e.which == 40 && index < $items.length - 1) index++         // down
3681    if (!~index)                                    index = 0
3682
3683    $items.eq(index).trigger('focus')
3684  }
3685
3686
3687  // DROPDOWN PLUGIN DEFINITION
3688  // ==========================
3689
3690  function Plugin(option) {
3691    return this.each(function () {
3692      var $this = $(this)
3693      var data  = $this.data('bs.dropdown')
3694
3695      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
3696      if (typeof option == 'string') data[option].call($this)
3697    })
3698  }
3699
3700  var old = $.fn.dropdown
3701
3702  $.fn.dropdown             = Plugin
3703  $.fn.dropdown.Constructor = Dropdown
3704
3705
3706  // DROPDOWN NO CONFLICT
3707  // ====================
3708
3709  $.fn.dropdown.noConflict = function () {
3710    $.fn.dropdown = old
3711    return this
3712  }
3713
3714
3715  // APPLY TO STANDARD DROPDOWN ELEMENTS
3716  // ===================================
3717
3718  $(document)
3719    .on('click.bs.dropdown.data-api', clearMenus)
3720    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
3721    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
3722    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
3723    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
3724
3725}(jQuery);
3726;
3727/* ========================================================================
3728 * Bootstrap: modal.js v3.3.7
3729 * http://getbootstrap.com/javascript/#modals
3730 * ========================================================================
3731 * Copyright 2011-2016 Twitter, Inc.
3732 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3733 * ======================================================================== */
3734
3735
3736+function ($) {
3737  'use strict';
3738
3739  // MODAL CLASS DEFINITION
3740  // ======================
3741
3742  var Modal = function (element, options) {
3743    this.options             = options
3744    this.$body               = $(document.body)
3745    this.$element            = $(element)
3746    this.$dialog             = this.$element.find('.modal-dialog')
3747    this.$backdrop           = null
3748    this.isShown             = null
3749    this.originalBodyPad     = null
3750    this.scrollbarWidth      = 0
3751    this.ignoreBackdropClick = false
3752
3753    if (this.options.remote) {
3754      this.$element
3755        .find('.modal-content')
3756        .load(this.options.remote, $.proxy(function () {
3757          this.$element.trigger('loaded.bs.modal')
3758        }, this))
3759    }
3760  }
3761
3762  Modal.VERSION  = '3.3.7'
3763
3764  Modal.TRANSITION_DURATION = 300
3765  Modal.BACKDROP_TRANSITION_DURATION = 150
3766
3767  Modal.DEFAULTS = {
3768    backdrop: true,
3769    keyboard: true,
3770    show: true
3771  }
3772
3773  Modal.prototype.toggle = function (_relatedTarget) {
3774    return this.isShown ? this.hide() : this.show(_relatedTarget)
3775  }
3776
3777  Modal.prototype.show = function (_relatedTarget) {
3778    var that = this
3779    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
3780
3781    this.$element.trigger(e)
3782
3783    if (this.isShown || e.isDefaultPrevented()) return
3784
3785    this.isShown = true
3786
3787    this.checkScrollbar()
3788    this.setScrollbar()
3789    this.$body.addClass('modal-open')
3790
3791    this.escape()
3792    this.resize()
3793
3794    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
3795
3796    this.$dialog.on('mousedown.dismiss.bs.modal', function () {
3797      that.$element.one('mouseup.dismiss.bs.modal', function (e) {
3798        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
3799      })
3800    })
3801
3802    this.backdrop(function () {
3803      var transition = $.support.transition && that.$element.hasClass('fade')
3804
3805      if (!that.$element.parent().length) {
3806        that.$element.appendTo(that.$body) // don't move modals dom position
3807      }
3808
3809      that.$element
3810        .show()
3811        .scrollTop(0)
3812
3813      that.adjustDialog()
3814
3815      if (transition) {
3816        that.$element[0].offsetWidth // force reflow
3817      }
3818
3819      that.$element.addClass('in')
3820
3821      that.enforceFocus()
3822
3823      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
3824
3825      transition ?
3826        that.$dialog // wait for modal to slide in
3827          .one('bsTransitionEnd', function () {
3828            that.$element.trigger('focus').trigger(e)
3829          })
3830          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
3831        that.$element.trigger('focus').trigger(e)
3832    })
3833  }
3834
3835  Modal.prototype.hide = function (e) {
3836    if (e) e.preventDefault()
3837
3838    e = $.Event('hide.bs.modal')
3839
3840    this.$element.trigger(e)
3841
3842    if (!this.isShown || e.isDefaultPrevented()) return
3843
3844    this.isShown = false
3845
3846    this.escape()
3847    this.resize()
3848
3849    $(document).off('focusin.bs.modal')
3850
3851    this.$element
3852      .removeClass('in')
3853      .off('click.dismiss.bs.modal')
3854      .off('mouseup.dismiss.bs.modal')
3855
3856    this.$dialog.off('mousedown.dismiss.bs.modal')
3857
3858    $.support.transition && this.$element.hasClass('fade') ?
3859      this.$element
3860        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
3861        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
3862      this.hideModal()
3863  }
3864
3865  Modal.prototype.enforceFocus = function () {
3866    $(document)
3867      .off('focusin.bs.modal') // guard against infinite focus loop
3868      .on('focusin.bs.modal', $.proxy(function (e) {
3869        if (document !== e.target &&
3870            this.$element[0] !== e.target &&
3871            !this.$element.has(e.target).length) {
3872          this.$element.trigger('focus')
3873        }
3874      }, this))
3875  }
3876
3877  Modal.prototype.escape = function () {
3878    if (this.isShown && this.options.keyboard) {
3879      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
3880        e.which == 27 && this.hide()
3881      }, this))
3882    } else if (!this.isShown) {
3883      this.$element.off('keydown.dismiss.bs.modal')
3884    }
3885  }
3886
3887  Modal.prototype.resize = function () {
3888    if (this.isShown) {
3889      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
3890    } else {
3891      $(window).off('resize.bs.modal')
3892    }
3893  }
3894
3895  Modal.prototype.hideModal = function () {
3896    var that = this
3897    this.$element.hide()
3898    this.backdrop(function () {
3899      that.$body.removeClass('modal-open')
3900      that.resetAdjustments()
3901      that.resetScrollbar()
3902      that.$element.trigger('hidden.bs.modal')
3903    })
3904  }
3905
3906  Modal.prototype.removeBackdrop = function () {
3907    this.$backdrop && this.$backdrop.remove()
3908    this.$backdrop = null
3909  }
3910
3911  Modal.prototype.backdrop = function (callback) {
3912    var that = this
3913    var animate = this.$element.hasClass('fade') ? 'fade' : ''
3914
3915    if (this.isShown && this.options.backdrop) {
3916      var doAnimate = $.support.transition && animate
3917
3918      this.$backdrop = $(document.createElement('div'))
3919        .addClass('modal-backdrop ' + animate)
3920        .appendTo(this.$body)
3921
3922      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
3923        if (this.ignoreBackdropClick) {
3924          this.ignoreBackdropClick = false
3925          return
3926        }
3927        if (e.target !== e.currentTarget) return
3928        this.options.backdrop == 'static'
3929          ? this.$element[0].focus()
3930          : this.hide()
3931      }, this))
3932
3933      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
3934
3935      this.$backdrop.addClass('in')
3936
3937      if (!callback) return
3938
3939      doAnimate ?
3940        this.$backdrop
3941          .one('bsTransitionEnd', callback)
3942          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
3943        callback()
3944
3945    } else if (!this.isShown && this.$backdrop) {
3946      this.$backdrop.removeClass('in')
3947
3948      var callbackRemove = function () {
3949        that.removeBackdrop()
3950        callback && callback()
3951      }
3952      $.support.transition && this.$element.hasClass('fade') ?
3953        this.$backdrop
3954          .one('bsTransitionEnd', callbackRemove)
3955          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
3956        callbackRemove()
3957
3958    } else if (callback) {
3959      callback()
3960    }
3961  }
3962
3963  // these following methods are used to handle overflowing modals
3964
3965  Modal.prototype.handleUpdate = function () {
3966    this.adjustDialog()
3967  }
3968
3969  Modal.prototype.adjustDialog = function () {
3970    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
3971
3972    this.$element.css({
3973      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
3974      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
3975    })
3976  }
3977
3978  Modal.prototype.resetAdjustments = function () {
3979    this.$element.css({
3980      paddingLeft: '',
3981      paddingRight: ''
3982    })
3983  }
3984
3985  Modal.prototype.checkScrollbar = function () {
3986    var fullWindowWidth = window.innerWidth
3987    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
3988      var documentElementRect = document.documentElement.getBoundingClientRect()
3989      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
3990    }
3991    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
3992    this.scrollbarWidth = this.measureScrollbar()
3993  }
3994
3995  Modal.prototype.setScrollbar = function () {
3996    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
3997    this.originalBodyPad = document.body.style.paddingRight || ''
3998    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
3999  }
4000
4001  Modal.prototype.resetScrollbar = function () {
4002    this.$body.css('padding-right', this.originalBodyPad)
4003  }
4004
4005  Modal.prototype.measureScrollbar = function () { // thx walsh
4006    var scrollDiv = document.createElement('div')
4007    scrollDiv.className = 'modal-scrollbar-measure'
4008    this.$body.append(scrollDiv)
4009    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
4010    this.$body[0].removeChild(scrollDiv)
4011    return scrollbarWidth
4012  }
4013
4014
4015  // MODAL PLUGIN DEFINITION
4016  // =======================
4017
4018  function Plugin(option, _relatedTarget) {
4019    return this.each(function () {
4020      var $this   = $(this)
4021      var data    = $this.data('bs.modal')
4022      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
4023
4024      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
4025      if (typeof option == 'string') data[option](_relatedTarget)
4026      else if (options.show) data.show(_relatedTarget)
4027    })
4028  }
4029
4030  var old = $.fn.modal
4031
4032  $.fn.modal             = Plugin
4033  $.fn.modal.Constructor = Modal
4034
4035
4036  // MODAL NO CONFLICT
4037  // =================
4038
4039  $.fn.modal.noConflict = function () {
4040    $.fn.modal = old
4041    return this
4042  }
4043
4044
4045  // MODAL DATA-API
4046  // ==============
4047
4048  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
4049    var $this   = $(this)
4050    var href    = $this.attr('href')
4051    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
4052    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
4053
4054    if ($this.is('a')) e.preventDefault()
4055
4056    $target.one('show.bs.modal', function (showEvent) {
4057      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
4058      $target.one('hidden.bs.modal', function () {
4059        $this.is(':visible') && $this.trigger('focus')
4060      })
4061    })
4062    Plugin.call($target, option, this)
4063  })
4064
4065}(jQuery);
4066;
4067/* ========================================================================
4068 * Bootstrap: tooltip.js v3.3.7
4069 * http://getbootstrap.com/javascript/#tooltip
4070 * Inspired by the original jQuery.tipsy by Jason Frame
4071 * ========================================================================
4072 * Copyright 2011-2016 Twitter, Inc.
4073 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4074 * ======================================================================== */
4075
4076
4077+function ($) {
4078  'use strict';
4079
4080  // TOOLTIP PUBLIC CLASS DEFINITION
4081  // ===============================
4082
4083  var Tooltip = function (element, options) {
4084    this.type       = null
4085    this.options    = null
4086    this.enabled    = null
4087    this.timeout    = null
4088    this.hoverState = null
4089    this.$element   = null
4090    this.inState    = null
4091
4092    this.init('tooltip', element, options)
4093  }
4094
4095  Tooltip.VERSION  = '3.3.7'
4096
4097  Tooltip.TRANSITION_DURATION = 150
4098
4099  Tooltip.DEFAULTS = {
4100    animation: true,
4101    placement: 'top',
4102    selector: false,
4103    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
4104    trigger: 'hover focus',
4105    title: '',
4106    delay: 0,
4107    html: false,
4108    container: false,
4109    viewport: {
4110      selector: 'body',
4111      padding: 0
4112    }
4113  }
4114
4115  Tooltip.prototype.init = function (type, element, options) {
4116    this.enabled   = true
4117    this.type      = type
4118    this.$element  = $(element)
4119    this.options   = this.getOptions(options)
4120    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
4121    this.inState   = { click: false, hover: false, focus: false }
4122
4123    if (this.$element[0] instanceof document.constructor && !this.options.selector) {
4124      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
4125    }
4126
4127    var triggers = this.options.trigger.split(' ')
4128
4129    for (var i = triggers.length; i--;) {
4130      var trigger = triggers[i]
4131
4132      if (trigger == 'click') {
4133        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
4134      } else if (trigger != 'manual') {
4135        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
4136        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
4137
4138        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
4139        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
4140      }
4141    }
4142
4143    this.options.selector ?
4144      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
4145      this.fixTitle()
4146  }
4147
4148  Tooltip.prototype.getDefaults = function () {
4149    return Tooltip.DEFAULTS
4150  }
4151
4152  Tooltip.prototype.getOptions = function (options) {
4153    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
4154
4155    if (options.delay && typeof options.delay == 'number') {
4156      options.delay = {
4157        show: options.delay,
4158        hide: options.delay
4159      }
4160    }
4161
4162    return options
4163  }
4164
4165  Tooltip.prototype.getDelegateOptions = function () {
4166    var options  = {}
4167    var defaults = this.getDefaults()
4168
4169    this._options && $.each(this._options, function (key, value) {
4170      if (defaults[key] != value) options[key] = value
4171    })
4172
4173    return options
4174  }
4175
4176  Tooltip.prototype.enter = function (obj) {
4177    var self = obj instanceof this.constructor ?
4178      obj : $(obj.currentTarget).data('bs.' + this.type)
4179
4180    if (!self) {
4181      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
4182      $(obj.currentTarget).data('bs.' + this.type, self)
4183    }
4184
4185    if (obj instanceof $.Event) {
vendor: 9,753 bytes, lines 4186-4464
4186      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
4187    }
4188
4189    if (self.tip().hasClass('in') || self.hoverState == 'in') {
4190      self.hoverState = 'in'
4191      return
4192    }
4193
4194    clearTimeout(self.timeout)
4195
4196    self.hoverState = 'in'
4197
4198    if (!self.options.delay || !self.options.delay.show) return self.show()
4199
4200    self.timeout = setTimeout(function () {
4201      if (self.hoverState == 'in') self.show()
4202    }, self.options.delay.show)
4203  }
4204
4205  Tooltip.prototype.isInStateTrue = function () {
4206    for (var key in this.inState) {
4207      if (this.inState[key]) return true
4208    }
4209
4210    return false
4211  }
4212
4213  Tooltip.prototype.leave = function (obj) {
4214    var self = obj instanceof this.constructor ?
4215      obj : $(obj.currentTarget).data('bs.' + this.type)
4216
4217    if (!self) {
4218      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
4219      $(obj.currentTarget).data('bs.' + this.type, self)
4220    }
4221
4222    if (obj instanceof $.Event) {
4223      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
4224    }
4225
4226    if (self.isInStateTrue()) return
4227
4228    clearTimeout(self.timeout)
4229
4230    self.hoverState = 'out'
4231
4232    if (!self.options.delay || !self.options.delay.hide) return self.hide()
4233
4234    self.timeout = setTimeout(function () {
4235      if (self.hoverState == 'out') self.hide()
4236    }, self.options.delay.hide)
4237  }
4238
4239  Tooltip.prototype.show = function () {
4240    var e = $.Event('show.bs.' + this.type)
4241
4242    if (this.hasContent() && this.enabled) {
4243      this.$element.trigger(e)
4244
4245      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
4246      if (e.isDefaultPrevented() || !inDom) return
4247      var that = this
4248
4249      var $tip = this.tip()
4250
4251      var tipId = this.getUID(this.type)
4252
4253      this.setContent()
4254      $tip.attr('id', tipId)
4255      this.$element.attr('aria-describedby', tipId)
4256
4257      if (this.options.animation) $tip.addClass('fade')
4258
4259      var placement = typeof this.options.placement == 'function' ?
4260        this.options.placement.call(this, $tip[0], this.$element[0]) :
4261        this.options.placement
4262
4263      var autoToken = /\s?auto?\s?/i
4264      var autoPlace = autoToken.test(placement)
4265      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
4266
4267      $tip
4268        .detach()
4269        .css({ top: 0, left: 0, display: 'block' })
4270        .addClass(placement)
4271        .data('bs.' + this.type, this)
4272
4273      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
4274      this.$element.trigger('inserted.bs.' + this.type)
4275
4276      var pos          = this.getPosition()
4277      var actualWidth  = $tip[0].offsetWidth
4278      var actualHeight = $tip[0].offsetHeight
4279
4280      if (autoPlace) {
4281        var orgPlacement = placement
4282        var viewportDim = this.getPosition(this.$viewport)
4283
4284        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :
4285                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :
4286                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :
4287                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :
4288                    placement
4289
4290        $tip
4291          .removeClass(orgPlacement)
4292          .addClass(placement)
4293      }
4294
4295      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
4296
4297      this.applyPlacement(calculatedOffset, placement)
4298
4299      var complete = function () {
4300        var prevHoverState = that.hoverState
4301        that.$element.trigger('shown.bs.' + that.type)
4302        that.hoverState = null
4303
4304        if (prevHoverState == 'out') that.leave(that)
4305      }
4306
4307      $.support.transition && this.$tip.hasClass('fade') ?
4308        $tip
4309          .one('bsTransitionEnd', complete)
4310          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
4311        complete()
4312    }
4313  }
4314
4315  Tooltip.prototype.applyPlacement = function (offset, placement) {
4316    var $tip   = this.tip()
4317    var width  = $tip[0].offsetWidth
4318    var height = $tip[0].offsetHeight
4319
4320    // manually read margins because getBoundingClientRect includes difference
4321    var marginTop = parseInt($tip.css('margin-top'), 10)
4322    var marginLeft = parseInt($tip.css('margin-left'), 10)
4323
4324    // we must check for NaN for ie 8/9
4325    if (isNaN(marginTop))  marginTop  = 0
4326    if (isNaN(marginLeft)) marginLeft = 0
4327
4328    offset.top  += marginTop
4329    offset.left += marginLeft
4330
4331    // $.fn.offset doesn't round pixel values
4332    // so we use setOffset directly with our own function B-0
4333    $.offset.setOffset($tip[0], $.extend({
4334      using: function (props) {
4335        $tip.css({
4336          top: Math.round(props.top),
4337          left: Math.round(props.left)
4338        })
4339      }
4340    }, offset), 0)
4341
4342    $tip.addClass('in')
4343
4344    // check to see if placing tip in new offset caused the tip to resize itself
4345    var actualWidth  = $tip[0].offsetWidth
4346    var actualHeight = $tip[0].offsetHeight
4347
4348    if (placement == 'top' && actualHeight != height) {
4349      offset.top = offset.top + height - actualHeight
4350    }
4351
4352    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
4353
4354    if (delta.left) offset.left += delta.left
4355    else offset.top += delta.top
4356
4357    var isVertical          = /top|bottom/.test(placement)
4358    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
4359    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
4360
4361    $tip.offset(offset)
4362    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
4363  }
4364
4365  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
4366    this.arrow()
4367      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
4368      .css(isVertical ? 'top' : 'left', '')
4369  }
4370
4371  Tooltip.prototype.setContent = function () {
4372    var $tip  = this.tip()
4373    var title = this.getTitle()
4374
4375    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
4376    $tip.removeClass('fade in top bottom left right')
4377  }
4378
4379  Tooltip.prototype.hide = function (callback) {
4380    var that = this
4381    var $tip = $(this.$tip)
4382    var e    = $.Event('hide.bs.' + this.type)
4383
4384    function complete() {
4385      if (that.hoverState != 'in') $tip.detach()
4386      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
4387        that.$element
4388          .removeAttr('aria-describedby')
4389          .trigger('hidden.bs.' + that.type)
4390      }
4391      callback && callback()
4392    }
4393
4394    this.$element.trigger(e)
4395
4396    if (e.isDefaultPrevented()) return
4397
4398    $tip.removeClass('in')
4399
4400    $.support.transition && $tip.hasClass('fade') ?
4401      $tip
4402        .one('bsTransitionEnd', complete)
4403        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
4404      complete()
4405
4406    this.hoverState = null
4407
4408    return this
4409  }
4410
4411  Tooltip.prototype.fixTitle = function () {
4412    var $e = this.$element
4413    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
4414      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
4415    }
4416  }
4417
4418  Tooltip.prototype.hasContent = function () {
4419    return this.getTitle()
4420  }
4421
4422  Tooltip.prototype.getPosition = function ($element) {
4423    $element   = $element || this.$element
4424
4425    var el     = $element[0]
4426    var isBody = el.tagName == 'BODY'
4427
4428    var elRect    = el.getBoundingClientRect()
4429    if (elRect.width == null) {
4430      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
4431      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
4432    }
4433    var isSvg = window.SVGElement && el instanceof window.SVGElement
4434    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
4435    // See https://github.com/twbs/bootstrap/issues/20280
4436    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
4437    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
4438    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
4439
4440    return $.extend({}, elRect, scroll, outerDims, elOffset)
4441  }
4442
4443  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
4444    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :
4445           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
4446           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
4447        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
4448
4449  }
4450
4451  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
4452    var delta = { top: 0, left: 0 }
4453    if (!this.$viewport) return delta
4454
4455    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
4456    var viewportDimensions = this.getPosition(this.$viewport)
4457
4458    if (/right|left/.test(placement)) {
4459      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
4460      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
4461      if (topEdgeOffset < viewportDimensions.top) { // top overflow
4462        delta.top = viewportDimensions.top - topEdgeOffset
4463      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
4464        delta.top = viewportDimensions.top + viewportDimensions.height - bottom
vendor: 19,829 bytes, lines 4464-5171
4464EdgeOffset
4465      }
4466    } else {
4467      var leftEdgeOffset  = pos.left - viewportPadding
4468      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
4469      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
4470        delta.left = viewportDimensions.left - leftEdgeOffset
4471      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
4472        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
4473      }
4474    }
4475
4476    return delta
4477  }
4478
4479  Tooltip.prototype.getTitle = function () {
4480    var title
4481    var $e = this.$element
4482    var o  = this.options
4483
4484    title = $e.attr('data-original-title')
4485      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
4486
4487    return title
4488  }
4489
4490  Tooltip.prototype.getUID = function (prefix) {
4491    do prefix += ~~(Math.random() * 1000000)
4492    while (document.getElementById(prefix))
4493    return prefix
4494  }
4495
4496  Tooltip.prototype.tip = function () {
4497    if (!this.$tip) {
4498      this.$tip = $(this.options.template)
4499      if (this.$tip.length != 1) {
4500        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
4501      }
4502    }
4503    return this.$tip
4504  }
4505
4506  Tooltip.prototype.arrow = function () {
4507    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
4508  }
4509
4510  Tooltip.prototype.enable = function () {
4511    this.enabled = true
4512  }
4513
4514  Tooltip.prototype.disable = function () {
4515    this.enabled = false
4516  }
4517
4518  Tooltip.prototype.toggleEnabled = function () {
4519    this.enabled = !this.enabled
4520  }
4521
4522  Tooltip.prototype.toggle = function (e) {
4523    var self = this
4524    if (e) {
4525      self = $(e.currentTarget).data('bs.' + this.type)
4526      if (!self) {
4527        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
4528        $(e.currentTarget).data('bs.' + this.type, self)
4529      }
4530    }
4531
4532    if (e) {
4533      self.inState.click = !self.inState.click
4534      if (self.isInStateTrue()) self.enter(self)
4535      else self.leave(self)
4536    } else {
4537      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
4538    }
4539  }
4540
4541  Tooltip.prototype.destroy = function () {
4542    var that = this
4543    clearTimeout(this.timeout)
4544    this.hide(function () {
4545      that.$element.off('.' + that.type).removeData('bs.' + that.type)
4546      if (that.$tip) {
4547        that.$tip.detach()
4548      }
4549      that.$tip = null
4550      that.$arrow = null
4551      that.$viewport = null
4552      that.$element = null
4553    })
4554  }
4555
4556
4557  // TOOLTIP PLUGIN DEFINITION
4558  // =========================
4559
4560  function Plugin(option) {
4561    return this.each(function () {
4562      var $this   = $(this)
4563      var data    = $this.data('bs.tooltip')
4564      var options = typeof option == 'object' && option
4565
4566      if (!data && /destroy|hide/.test(option)) return
4567      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
4568      if (typeof option == 'string') data[option]()
4569    })
4570  }
4571
4572  var old = $.fn.tooltip
4573
4574  $.fn.tooltip             = Plugin
4575  $.fn.tooltip.Constructor = Tooltip
4576
4577
4578  // TOOLTIP NO CONFLICT
4579  // ===================
4580
4581  $.fn.tooltip.noConflict = function () {
4582    $.fn.tooltip = old
4583    return this
4584  }
4585
4586}(jQuery);
4587;
4588/* ========================================================================
4589 * Bootstrap: popover.js v3.3.7
4590 * http://getbootstrap.com/javascript/#popovers
4591 * ========================================================================
4592 * Copyright 2011-2016 Twitter, Inc.
4593 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4594 * ======================================================================== */
4595
4596
4597+function ($) {
4598  'use strict';
4599
4600  // POPOVER PUBLIC CLASS DEFINITION
4601  // ===============================
4602
4603  var Popover = function (element, options) {
4604    this.init('popover', element, options)
4605  }
4606
4607  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
4608
4609  Popover.VERSION  = '3.3.7'
4610
4611  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
4612    placement: 'right',
4613    trigger: 'click',
4614    content: '',
4615    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
4616  })
4617
4618
4619  // NOTE: POPOVER EXTENDS tooltip.js
4620  // ================================
4621
4622  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
4623
4624  Popover.prototype.constructor = Popover
4625
4626  Popover.prototype.getDefaults = function () {
4627    return Popover.DEFAULTS
4628  }
4629
4630  Popover.prototype.setContent = function () {
4631    var $tip    = this.tip()
4632    var title   = this.getTitle()
4633    var content = this.getContent()
4634
4635    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
4636    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
4637      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
4638    ](content)
4639
4640    $tip.removeClass('fade top bottom left right in')
4641
4642    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
4643    // this manually by checking the contents.
4644    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
4645  }
4646
4647  Popover.prototype.hasContent = function () {
4648    return this.getTitle() || this.getContent()
4649  }
4650
4651  Popover.prototype.getContent = function () {
4652    var $e = this.$element
4653    var o  = this.options
4654
4655    return $e.attr('data-content')
4656      || (typeof o.content == 'function' ?
4657            o.content.call($e[0]) :
4658            o.content)
4659  }
4660
4661  Popover.prototype.arrow = function () {
4662    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
4663  }
4664
4665
4666  // POPOVER PLUGIN DEFINITION
4667  // =========================
4668
4669  function Plugin(option) {
4670    return this.each(function () {
4671      var $this   = $(this)
4672      var data    = $this.data('bs.popover')
4673      var options = typeof option == 'object' && option
4674
4675      if (!data && /destroy|hide/.test(option)) return
4676      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
4677      if (typeof option == 'string') data[option]()
4678    })
4679  }
4680
4681  var old = $.fn.popover
4682
4683  $.fn.popover             = Plugin
4684  $.fn.popover.Constructor = Popover
4685
4686
4687  // POPOVER NO CONFLICT
4688  // ===================
4689
4690  $.fn.popover.noConflict = function () {
4691    $.fn.popover = old
4692    return this
4693  }
4694
4695}(jQuery);
4696;
4697/* ========================================================================
4698 * Bootstrap: scrollspy.js v3.3.7
4699 * http://getbootstrap.com/javascript/#scrollspy
4700 * ========================================================================
4701 * Copyright 2011-2016 Twitter, Inc.
4702 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4703 * ======================================================================== */
4704
4705
4706+function ($) {
4707  'use strict';
4708
4709  // SCROLLSPY CLASS DEFINITION
4710  // ==========================
4711
4712  function ScrollSpy(element, options) {
4713    this.$body          = $(document.body)
4714    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
4715    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
4716    this.selector       = (this.options.target || '') + ' .nav li > a'
4717    this.offsets        = []
4718    this.targets        = []
4719    this.activeTarget   = null
4720    this.scrollHeight   = 0
4721
4722    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
4723    this.refresh()
4724    this.process()
4725  }
4726
4727  ScrollSpy.VERSION  = '3.3.7'
4728
4729  ScrollSpy.DEFAULTS = {
4730    offset: 10
4731  }
4732
4733  ScrollSpy.prototype.getScrollHeight = function () {
4734    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
4735  }
4736
4737  ScrollSpy.prototype.refresh = function () {
4738    var that          = this
4739    var offsetMethod  = 'offset'
4740    var offsetBase    = 0
4741
4742    this.offsets      = []
4743    this.targets      = []
4744    this.scrollHeight = this.getScrollHeight()
4745
4746    if (!$.isWindow(this.$scrollElement[0])) {
4747      offsetMethod = 'position'
4748      offsetBase   = this.$scrollElement.scrollTop()
4749    }
4750
4751    this.$body
4752      .find(this.selector)
4753      .map(function () {
4754        var $el   = $(this)
4755        var href  = $el.data('target') || $el.attr('href')
4756        var $href = /^#./.test(href) && $(href)
4757
4758        return ($href
4759          && $href.length
4760          && $href.is(':visible')
4761          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
4762      })
4763      .sort(function (a, b) { return a[0] - b[0] })
4764      .each(function () {
4765        that.offsets.push(this[0])
4766        that.targets.push(this[1])
4767      })
4768  }
4769
4770  ScrollSpy.prototype.process = function () {
4771    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
4772    var scrollHeight = this.getScrollHeight()
4773    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
4774    var offsets      = this.offsets
4775    var targets      = this.targets
4776    var activeTarget = this.activeTarget
4777    var i
4778
4779    if (this.scrollHeight != scrollHeight) {
4780      this.refresh()
4781    }
4782
4783    if (scrollTop >= maxScroll) {
4784      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
4785    }
4786
4787    if (activeTarget && scrollTop < offsets[0]) {
4788      this.activeTarget = null
4789      return this.clear()
4790    }
4791
4792    for (i = offsets.length; i--;) {
4793      activeTarget != targets[i]
4794        && scrollTop >= offsets[i]
4795        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
4796        && this.activate(targets[i])
4797    }
4798  }
4799
4800  ScrollSpy.prototype.activate = function (target) {
4801    this.activeTarget = target
4802
4803    this.clear()
4804
4805    var selector = this.selector +
4806      '[data-target="' + target + '"],' +
4807      this.selector + '[href="' + target + '"]'
4808
4809    var active = $(selector)
4810      .parents('li')
4811      .addClass('active')
4812
4813    if (active.parent('.dropdown-menu').length) {
4814      active = active
4815        .closest('li.dropdown')
4816        .addClass('active')
4817    }
4818
4819    active.trigger('activate.bs.scrollspy')
4820  }
4821
4822  ScrollSpy.prototype.clear = function () {
4823    $(this.selector)
4824      .parentsUntil(this.options.target, '.active')
4825      .removeClass('active')
4826  }
4827
4828
4829  // SCROLLSPY PLUGIN DEFINITION
4830  // ===========================
4831
4832  function Plugin(option) {
4833    return this.each(function () {
4834      var $this   = $(this)
4835      var data    = $this.data('bs.scrollspy')
4836      var options = typeof option == 'object' && option
4837
4838      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
4839      if (typeof option == 'string') data[option]()
4840    })
4841  }
4842
4843  var old = $.fn.scrollspy
4844
4845  $.fn.scrollspy             = Plugin
4846  $.fn.scrollspy.Constructor = ScrollSpy
4847
4848
4849  // SCROLLSPY NO CONFLICT
4850  // =====================
4851
4852  $.fn.scrollspy.noConflict = function () {
4853    $.fn.scrollspy = old
4854    return this
4855  }
4856
4857
4858  // SCROLLSPY DATA-API
4859  // ==================
4860
4861  $(window).on('load.bs.scrollspy.data-api', function () {
4862    $('[data-spy="scroll"]').each(function () {
4863      var $spy = $(this)
4864      Plugin.call($spy, $spy.data())
4865    })
4866  })
4867
4868}(jQuery);
4869;
4870/* ========================================================================
4871 * Bootstrap: tab.js v3.3.7
4872 * http://getbootstrap.com/javascript/#tabs
4873 * ========================================================================
4874 * Copyright 2011-2016 Twitter, Inc.
4875 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4876 * ======================================================================== */
4877
4878
4879+function ($) {
4880  'use strict';
4881
4882  // TAB CLASS DEFINITION
4883  // ====================
4884
4885  var Tab = function (element) {
4886    // jscs:disable requireDollarBeforejQueryAssignment
4887    this.element = $(element)
4888    // jscs:enable requireDollarBeforejQueryAssignment
4889  }
4890
4891  Tab.VERSION = '3.3.7'
4892
4893  Tab.TRANSITION_DURATION = 150
4894
4895  Tab.prototype.show = function () {
4896    var $this    = this.element
4897    var $ul      = $this.closest('ul:not(.dropdown-menu)')
4898    var selector = $this.data('target')
4899
4900    if (!selector) {
4901      selector = $this.attr('href')
4902      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
4903    }
4904
4905    if ($this.parent('li').hasClass('active')) return
4906
4907    var $previous = $ul.find('.active:last a')
4908    var hideEvent = $.Event('hide.bs.tab', {
4909      relatedTarget: $this[0]
4910    })
4911    var showEvent = $.Event('show.bs.tab', {
4912      relatedTarget: $previous[0]
4913    })
4914
4915    $previous.trigger(hideEvent)
4916    $this.trigger(showEvent)
4917
4918    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
4919
4920    var $target = $(selector)
4921
4922    this.activate($this.closest('li'), $ul)
4923    this.activate($target, $target.parent(), function () {
4924      $previous.trigger({
4925        type: 'hidden.bs.tab',
4926        relatedTarget: $this[0]
4927      })
4928      $this.trigger({
4929        type: 'shown.bs.tab',
4930        relatedTarget: $previous[0]
4931      })
4932    })
4933  }
4934
4935  Tab.prototype.activate = function (element, container, callback) {
4936    var $active    = container.find('> .active')
4937    var transition = callback
4938      && $.support.transition
4939      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
4940
4941    function next() {
4942      $active
4943        .removeClass('active')
4944        .find('> .dropdown-menu > .active')
4945          .removeClass('active')
4946        .end()
4947        .find('[data-toggle="tab"]')
4948          .attr('aria-expanded', false)
4949
4950      element
4951        .addClass('active')
4952        .find('[data-toggle="tab"]')
4953          .attr('aria-expanded', true)
4954
4955      if (transition) {
4956        element[0].offsetWidth // reflow for transition
4957        element.addClass('in')
4958      } else {
4959        element.removeClass('fade')
4960      }
4961
4962      if (element.parent('.dropdown-menu').length) {
4963        element
4964          .closest('li.dropdown')
4965            .addClass('active')
4966          .end()
4967          .find('[data-toggle="tab"]')
4968            .attr('aria-expanded', true)
4969      }
4970
4971      callback && callback()
4972    }
4973
4974    $active.length && transition ?
4975      $active
4976        .one('bsTransitionEnd', next)
4977        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
4978      next()
4979
4980    $active.removeClass('in')
4981  }
4982
4983
4984  // TAB PLUGIN DEFINITION
4985  // =====================
4986
4987  function Plugin(option) {
4988    return this.each(function () {
4989      var $this = $(this)
4990      var data  = $this.data('bs.tab')
4991
4992      if (!data) $this.data('bs.tab', (data = new Tab(this)))
4993      if (typeof option == 'string') data[option]()
4994    })
4995  }
4996
4997  var old = $.fn.tab
4998
4999  $.fn.tab             = Plugin
5000  $.fn.tab.Constructor = Tab
5001
5002
5003  // TAB NO CONFLICT
5004  // ===============
5005
5006  $.fn.tab.noConflict = function () {
5007    $.fn.tab = old
5008    return this
5009  }
5010
5011
5012  // TAB DATA-API
5013  // ============
5014
5015  var clickHandler = function (e) {
5016    e.preventDefault()
5017    Plugin.call($(this), 'show')
5018  }
5019
5020  $(document)
5021    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
5022    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
5023
5024}(jQuery);
5025;
5026/* ========================================================================
5027 * Bootstrap: transition.js v3.3.7
5028 * http://getbootstrap.com/javascript/#transitions
5029 * ========================================================================
5030 * Copyright 2011-2016 Twitter, Inc.
5031 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5032 * ======================================================================== */
5033
5034
5035+function ($) {
5036  'use strict';
5037
5038  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
5039  // ============================================================
5040
5041  function transitionEnd() {
5042    var el = document.createElement('bootstrap')
5043
5044    var transEndEventNames = {
5045      WebkitTransition : 'webkitTransitionEnd',
5046      MozTransition    : 'transitionend',
5047      OTransition      : 'oTransitionEnd otransitionend',
5048      transition       : 'transitionend'
5049    }
5050
5051    for (var name in transEndEventNames) {
5052      if (el.style[name] !== undefined) {
5053        return { end: transEndEventNames[name] }
5054      }
5055    }
5056
5057    return false // explicit for ie8 (  ._.)
5058  }
5059
5060  // http://blog.alexmaccaw.com/css-transitions
5061  $.fn.emulateTransitionEnd = function (duration) {
5062    var called = false
5063    var $el = this
5064    $(this).one('bsTransitionEnd', function () { called = true })
5065    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
5066    setTimeout(callback, duration)
5067    return this
5068  }
5069
5070  $(function () {
5071    $.support.transition = transitionEnd()
5072
5073    if (!$.support.transition) return
5074
5075    $.event.special.bsTransitionEnd = {
5076      bindType: $.support.transition.end,
5077      delegateType: $.support.transition.end,
5078      handle: function (e) {
5079        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
5080      }
5081    }
5082  })
5083
5084}(jQuery);
5085;
5086/* ========================================================================
5087 * Bootstrap: affix.js v3.3.7
5088 * http://getbootstrap.com/javascript/#affix
5089 * ========================================================================
5090 * Copyright 2011-2016 Twitter, Inc.
5091 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5092 * ======================================================================== */
5093
5094
5095+function ($) {
5096  'use strict';
5097
5098  // AFFIX CLASS DEFINITION
5099  // ======================
5100
5101  var Affix = function (element, options) {
5102    this.options = $.extend({}, Affix.DEFAULTS, options)
5103
5104    this.$target = $(this.options.target)
5105      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
5106      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
5107
5108    this.$element     = $(element)
5109    this.affixed      = null
5110    this.unpin        = null
5111    this.pinnedOffset = null
5112
5113    this.checkPosition()
5114  }
5115
5116  Affix.VERSION  = '3.3.7'
5117
5118  Affix.RESET    = 'affix affix-top affix-bottom'
5119
5120  Affix.DEFAULTS = {
5121    offset: 0,
5122    target: window
5123  }
5124
5125  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
5126    var scrollTop    = this.$target.scrollTop()
5127    var position     = this.$element.offset()
5128    var targetHeight = this.$target.height()
5129
5130    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
5131
5132    if (this.affixed == 'bottom') {
5133      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
5134      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
5135    }
5136
5137    var initializing   = this.affixed == null
5138    var colliderTop    = initializing ? scrollTop : position.top
5139    var colliderHeight = initializing ? targetHeight : height
5140
5141    if (offsetTop != null && scrollTop <= offsetTop) return 'top'
5142    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
5143
5144    return false
5145  }
5146
5147  Affix.prototype.getPinnedOffset = function () {
5148    if (this.pinnedOffset) return this.pinnedOffset
5149    this.$element.removeClass(Affix.RESET).addClass('affix')
5150    var scrollTop = this.$target.scrollTop()
5151    var position  = this.$element.offset()
5152    return (this.pinnedOffset = position.top - scrollTop)
5153  }
5154
5155  Affix.prototype.checkPositionWithEventLoop = function () {
5156    setTimeout($.proxy(this.checkPosition, this), 1)
5157  }
5158
5159  Affix.prototype.checkPosition = function () {
5160    if (!this.$element.is(':visible')) return
5161
5162    var height       = this.$element.height()
5163    var offset       = this.options.offset
5164    var offsetTop    = offset.top
5165    var offsetBottom = offset.bottom
5166    var scrollHeight = Math.max($(document).height(), $(document.body).height())
5167
5168    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
5169    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
5170    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
5171
vendor: 12,427 bytes, lines 5172-5613
5172    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
5173
5174    if (this.affixed != affix) {
5175      if (this.unpin != null) this.$element.css('top', '')
5176
5177      var affixType = 'affix' + (affix ? '-' + affix : '')
5178      var e         = $.Event(affixType + '.bs.affix')
5179
5180      this.$element.trigger(e)
5181
5182      if (e.isDefaultPrevented()) return
5183
5184      this.affixed = affix
5185      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
5186
5187      this.$element
5188        .removeClass(Affix.RESET)
5189        .addClass(affixType)
5190        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
5191    }
5192
5193    if (affix == 'bottom') {
5194      this.$element.offset({
5195        top: scrollHeight - height - offsetBottom
5196      })
5197    }
5198  }
5199
5200
5201  // AFFIX PLUGIN DEFINITION
5202  // =======================
5203
5204  function Plugin(option) {
5205    return this.each(function () {
5206      var $this   = $(this)
5207      var data    = $this.data('bs.affix')
5208      var options = typeof option == 'object' && option
5209
5210      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
5211      if (typeof option == 'string') data[option]()
5212    })
5213  }
5214
5215  var old = $.fn.affix
5216
5217  $.fn.affix             = Plugin
5218  $.fn.affix.Constructor = Affix
5219
5220
5221  // AFFIX NO CONFLICT
5222  // =================
5223
5224  $.fn.affix.noConflict = function () {
5225    $.fn.affix = old
5226    return this
5227  }
5228
5229
5230  // AFFIX DATA-API
5231  // ==============
5232
5233  $(window).on('load', function () {
5234    $('[data-spy="affix"]').each(function () {
5235      var $spy = $(this)
5236      var data = $spy.data()
5237
5238      data.offset = data.offset || {}
5239
5240      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
5241      if (data.offsetTop    != null) data.offset.top    = data.offsetTop
5242
5243      Plugin.call($spy, data)
5244    })
5245  })
5246
5247}(jQuery);
5248;
5249/* ========================================================================
5250 * Bootstrap: alert.js v3.3.7
5251 * http://getbootstrap.com/javascript/#alerts
5252 * ========================================================================
5253 * Copyright 2011-2016 Twitter, Inc.
5254 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5255 * ======================================================================== */
5256
5257
5258+function ($) {
5259  'use strict';
5260
5261  // ALERT CLASS DEFINITION
5262  // ======================
5263
5264  var dismiss = '[data-dismiss="alert"]'
5265  var Alert   = function (el) {
5266    $(el).on('click', dismiss, this.close)
5267  }
5268
5269  Alert.VERSION = '3.3.7'
5270
5271  Alert.TRANSITION_DURATION = 150
5272
5273  Alert.prototype.close = function (e) {
5274    var $this    = $(this)
5275    var selector = $this.attr('data-target')
5276
5277    if (!selector) {
5278      selector = $this.attr('href')
5279      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
5280    }
5281
5282    var $parent = $(selector === '#' ? [] : selector)
5283
5284    if (e) e.preventDefault()
5285
5286    if (!$parent.length) {
5287      $parent = $this.closest('.alert')
5288    }
5289
5290    $parent.trigger(e = $.Event('close.bs.alert'))
5291
5292    if (e.isDefaultPrevented()) return
5293
5294    $parent.removeClass('in')
5295
5296    function removeElement() {
5297      // detach from parent, fire event then clean up data
5298      $parent.detach().trigger('closed.bs.alert').remove()
5299    }
5300
5301    $.support.transition && $parent.hasClass('fade') ?
5302      $parent
5303        .one('bsTransitionEnd', removeElement)
5304        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
5305      removeElement()
5306  }
5307
5308
5309  // ALERT PLUGIN DEFINITION
5310  // =======================
5311
5312  function Plugin(option) {
5313    return this.each(function () {
5314      var $this = $(this)
5315      var data  = $this.data('bs.alert')
5316
5317      if (!data) $this.data('bs.alert', (data = new Alert(this)))
5318      if (typeof option == 'string') data[option].call($this)
5319    })
5320  }
5321
5322  var old = $.fn.alert
5323
5324  $.fn.alert             = Plugin
5325  $.fn.alert.Constructor = Alert
5326
5327
5328  // ALERT NO CONFLICT
5329  // =================
5330
5331  $.fn.alert.noConflict = function () {
5332    $.fn.alert = old
5333    return this
5334  }
5335
5336
5337  // ALERT DATA-API
5338  // ==============
5339
5340  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
5341
5342}(jQuery);
5343;
5344/* ========================================================================
5345 * Bootstrap: button.js v3.3.7
5346 * http://getbootstrap.com/javascript/#buttons
5347 * ========================================================================
5348 * Copyright 2011-2016 Twitter, Inc.
5349 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5350 * ======================================================================== */
5351
5352
5353+function ($) {
5354  'use strict';
5355
5356  // BUTTON PUBLIC CLASS DEFINITION
5357  // ==============================
5358
5359  var Button = function (element, options) {
5360    this.$element  = $(element)
5361    this.options   = $.extend({}, Button.DEFAULTS, options)
5362    this.isLoading = false
5363  }
5364
5365  Button.VERSION  = '3.3.7'
5366
5367  Button.DEFAULTS = {
5368    loadingText: 'loading...'
5369  }
5370
5371  Button.prototype.setState = function (state) {
5372    var d    = 'disabled'
5373    var $el  = this.$element
5374    var val  = $el.is('input') ? 'val' : 'html'
5375    var data = $el.data()
5376
5377    state += 'Text'
5378
5379    if (data.resetText == null) $el.data('resetText', $el[val]())
5380
5381    // push to event loop to allow forms to submit
5382    setTimeout($.proxy(function () {
5383      $el[val](data[state] == null ? this.options[state] : data[state])
5384
5385      if (state == 'loadingText') {
5386        this.isLoading = true
5387        $el.addClass(d).attr(d, d).prop(d, true)
5388      } else if (this.isLoading) {
5389        this.isLoading = false
5390        $el.removeClass(d).removeAttr(d).prop(d, false)
5391      }
5392    }, this), 0)
5393  }
5394
5395  Button.prototype.toggle = function () {
5396    var changed = true
5397    var $parent = this.$element.closest('[data-toggle="buttons"]')
5398
5399    if ($parent.length) {
5400      var $input = this.$element.find('input')
5401      if ($input.prop('type') == 'radio') {
5402        if ($input.prop('checked')) changed = false
5403        $parent.find('.active').removeClass('active')
5404        this.$element.addClass('active')
5405      } else if ($input.prop('type') == 'checkbox') {
5406        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
5407        this.$element.toggleClass('active')
5408      }
5409      $input.prop('checked', this.$element.hasClass('active'))
5410      if (changed) $input.trigger('change')
5411    } else {
5412      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
5413      this.$element.toggleClass('active')
5414    }
5415  }
5416
5417
5418  // BUTTON PLUGIN DEFINITION
5419  // ========================
5420
5421  function Plugin(option) {
5422    return this.each(function () {
5423      var $this   = $(this)
5424      var data    = $this.data('bs.button')
5425      var options = typeof option == 'object' && option
5426
5427      if (!data) $this.data('bs.button', (data = new Button(this, options)))
5428
5429      if (option == 'toggle') data.toggle()
5430      else if (option) data.setState(option)
5431    })
5432  }
5433
5434  var old = $.fn.button
5435
5436  $.fn.button             = Plugin
5437  $.fn.button.Constructor = Button
5438
5439
5440  // BUTTON NO CONFLICT
5441  // ==================
5442
5443  $.fn.button.noConflict = function () {
5444    $.fn.button = old
5445    return this
5446  }
5447
5448
5449  // BUTTON DATA-API
5450  // ===============
5451
5452  $(document)
5453    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
5454      var $btn = $(e.target).closest('.btn')
5455      Plugin.call($btn, 'toggle')
5456      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
5457        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
5458        e.preventDefault()
5459        // The target component still receive the focus
5460        if ($btn.is('input,button')) $btn.trigger('focus')
5461        else $btn.find('input:visible,button:visible').first().trigger('focus')
5462      }
5463    })
5464    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
5465      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
5466    })
5467
5468}(jQuery);
5469;
5470/* ========================================================================
5471 * Bootstrap: carousel.js v3.3.7
5472 * http://getbootstrap.com/javascript/#carousel
5473 * ========================================================================
5474 * Copyright 2011-2016 Twitter, Inc.
5475 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5476 * ======================================================================== */
5477
5478
5479+function ($) {
5480  'use strict';
5481
5482  // CAROUSEL CLASS DEFINITION
5483  // =========================
5484
5485  var Carousel = function (element, options) {
5486    this.$element    = $(element)
5487    this.$indicators = this.$element.find('.carousel-indicators')
5488    this.options     = options
5489    this.paused      = null
5490    this.sliding     = null
5491    this.interval    = null
5492    this.$active     = null
5493    this.$items      = null
5494
5495    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
5496
5497    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
5498      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
5499      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
5500  }
5501
5502  Carousel.VERSION  = '3.3.7'
5503
5504  Carousel.TRANSITION_DURATION = 600
5505
5506  Carousel.DEFAULTS = {
5507    interval: 5000,
5508    pause: 'hover',
5509    wrap: true,
5510    keyboard: true
5511  }
5512
5513  Carousel.prototype.keydown = function (e) {
5514    if (/input|textarea/i.test(e.target.tagName)) return
5515    switch (e.which) {
5516      case 37: this.prev(); break
5517      case 39: this.next(); break
5518      default: return
5519    }
5520
5521    e.preventDefault()
5522  }
5523
5524  Carousel.prototype.cycle = function (e) {
5525    e || (this.paused = false)
5526
5527    this.interval && clearInterval(this.interval)
5528
5529    this.options.interval
5530      && !this.paused
5531      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
5532
5533    return this
5534  }
5535
5536  Carousel.prototype.getItemIndex = function (item) {
5537    this.$items = item.parent().children('.item')
5538    return this.$items.index(item || this.$active)
5539  }
5540
5541  Carousel.prototype.getItemForDirection = function (direction, active) {
5542    var activeIndex = this.getItemIndex(active)
5543    var willWrap = (direction == 'prev' && activeIndex === 0)
5544                || (direction == 'next' && activeIndex == (this.$items.length - 1))
5545    if (willWrap && !this.options.wrap) return active
5546    var delta = direction == 'prev' ? -1 : 1
5547    var itemIndex = (activeIndex + delta) % this.$items.length
5548    return this.$items.eq(itemIndex)
5549  }
5550
5551  Carousel.prototype.to = function (pos) {
5552    var that        = this
5553    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
5554
5555    if (pos > (this.$items.length - 1) || pos < 0) return
5556
5557    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
5558    if (activeIndex == pos) return this.pause().cycle()
5559
5560    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
5561  }
5562
5563  Carousel.prototype.pause = function (e) {
5564    e || (this.paused = true)
5565
5566    if (this.$element.find('.next, .prev').length && $.support.transition) {
5567      this.$element.trigger($.support.transition.end)
5568      this.cycle(true)
5569    }
5570
5571    this.interval = clearInterval(this.interval)
5572
5573    return this
5574  }
5575
5576  Carousel.prototype.next = function () {
5577    if (this.sliding) return
5578    return this.slide('next')
5579  }
5580
5581  Carousel.prototype.prev = function () {
5582    if (this.sliding) return
5583    return this.slide('prev')
5584  }
5585
5586  Carousel.prototype.slide = function (type, next) {
5587    var $active   = this.$element.find('.item.active')
5588    var $next     = next || this.getItemForDirection(type, $active)
5589    var isCycling = this.interval
5590    var direction = type == 'next' ? 'left' : 'right'
5591    var that      = this
5592
5593    if ($next.hasClass('active')) return (this.sliding = false)
5594
5595    var relatedTarget = $next[0]
5596    var slideEvent = $.Event('slide.bs.carousel', {
5597      relatedTarget: relatedTarget,
5598      direction: direction
5599    })
5600    this.$element.trigger(slideEvent)
5601    if (slideEvent.isDefaultPrevented()) return
5602
5603    this.sliding = true
5604
5605    isCycling && this.pause()
5606
5607    if (this.$indicators.length) {
5608      this.$indicators.find('.active').removeClass('active')
5609      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
5610      $nextIndicator && $nextIndicator.addClass('active')
5611    }
5612
5613    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
vendor: 27,148 bytes, lines 5614-6545
5614    if ($.support.transition && this.$element.hasClass('slide')) {
5615      $next.addClass(type)
5616      $next[0].offsetWidth // force reflow
5617      $active.addClass(direction)
5618      $next.addClass(direction)
5619      $active
5620        .one('bsTransitionEnd', function () {
5621          $next.removeClass([type, direction].join(' ')).addClass('active')
5622          $active.removeClass(['active', direction].join(' '))
5623          that.sliding = false
5624          setTimeout(function () {
5625            that.$element.trigger(slidEvent)
5626          }, 0)
5627        })
5628        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
5629    } else {
5630      $active.removeClass('active')
5631      $next.addClass('active')
5632      this.sliding = false
5633      this.$element.trigger(slidEvent)
5634    }
5635
5636    isCycling && this.cycle()
5637
5638    return this
5639  }
5640
5641
5642  // CAROUSEL PLUGIN DEFINITION
5643  // ==========================
5644
5645  function Plugin(option) {
5646    return this.each(function () {
5647      var $this   = $(this)
5648      var data    = $this.data('bs.carousel')
5649      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
5650      var action  = typeof option == 'string' ? option : options.slide
5651
5652      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
5653      if (typeof option == 'number') data.to(option)
5654      else if (action) data[action]()
5655      else if (options.interval) data.pause().cycle()
5656    })
5657  }
5658
5659  var old = $.fn.carousel
5660
5661  $.fn.carousel             = Plugin
5662  $.fn.carousel.Constructor = Carousel
5663
5664
5665  // CAROUSEL NO CONFLICT
5666  // ====================
5667
5668  $.fn.carousel.noConflict = function () {
5669    $.fn.carousel = old
5670    return this
5671  }
5672
5673
5674  // CAROUSEL DATA-API
5675  // =================
5676
5677  var clickHandler = function (e) {
5678    var href
5679    var $this   = $(this)
5680    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
5681    if (!$target.hasClass('carousel')) return
5682    var options = $.extend({}, $target.data(), $this.data())
5683    var slideIndex = $this.attr('data-slide-to')
5684    if (slideIndex) options.interval = false
5685
5686    Plugin.call($target, options)
5687
5688    if (slideIndex) {
5689      $target.data('bs.carousel').to(slideIndex)
5690    }
5691
5692    e.preventDefault()
5693  }
5694
5695  $(document)
5696    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
5697    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
5698
5699  $(window).on('load', function () {
5700    $('[data-ride="carousel"]').each(function () {
5701      var $carousel = $(this)
5702      Plugin.call($carousel, $carousel.data())
5703    })
5704  })
5705
5706}(jQuery);
5707;
5708/* ========================================================================
5709 * Bootstrap: collapse.js v3.3.7
5710 * http://getbootstrap.com/javascript/#collapse
5711 * ========================================================================
5712 * Copyright 2011-2016 Twitter, Inc.
5713 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5714 * ======================================================================== */
5715
5716/* jshint latedef: false */
5717
5718+function ($) {
5719  'use strict';
5720
5721  // COLLAPSE PUBLIC CLASS DEFINITION
5722  // ================================
5723
5724  var Collapse = function (element, options) {
5725    this.$element      = $(element)
5726    this.options       = $.extend({}, Collapse.DEFAULTS, options)
5727    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
5728                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')
5729    this.transitioning = null
5730
5731    if (this.options.parent) {
5732      this.$parent = this.getParent()
5733    } else {
5734      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
5735    }
5736
5737    if (this.options.toggle) this.toggle()
5738  }
5739
5740  Collapse.VERSION  = '3.3.7'
5741
5742  Collapse.TRANSITION_DURATION = 350
5743
5744  Collapse.DEFAULTS = {
5745    toggle: true
5746  }
5747
5748  Collapse.prototype.dimension = function () {
5749    var hasWidth = this.$element.hasClass('width')
5750    return hasWidth ? 'width' : 'height'
5751  }
5752
5753  Collapse.prototype.show = function () {
5754    if (this.transitioning || this.$element.hasClass('in')) return
5755
5756    var activesData
5757    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
5758
5759    if (actives && actives.length) {
5760      activesData = actives.data('bs.collapse')
5761      if (activesData && activesData.transitioning) return
5762    }
5763
5764    var startEvent = $.Event('show.bs.collapse')
5765    this.$element.trigger(startEvent)
5766    if (startEvent.isDefaultPrevented()) return
5767
5768    if (actives && actives.length) {
5769      Plugin.call(actives, 'hide')
5770      activesData || actives.data('bs.collapse', null)
5771    }
5772
5773    var dimension = this.dimension()
5774
5775    this.$element
5776      .removeClass('collapse')
5777      .addClass('collapsing')[dimension](0)
5778      .attr('aria-expanded', true)
5779
5780    this.$trigger
5781      .removeClass('collapsed')
5782      .attr('aria-expanded', true)
5783
5784    this.transitioning = 1
5785
5786    var complete = function () {
5787      this.$element
5788        .removeClass('collapsing')
5789        .addClass('collapse in')[dimension]('')
5790      this.transitioning = 0
5791      this.$element
5792        .trigger('shown.bs.collapse')
5793    }
5794
5795    if (!$.support.transition) return complete.call(this)
5796
5797    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
5798
5799    this.$element
5800      .one('bsTransitionEnd', $.proxy(complete, this))
5801      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
5802  }
5803
5804  Collapse.prototype.hide = function () {
5805    if (this.transitioning || !this.$element.hasClass('in')) return
5806
5807    var startEvent = $.Event('hide.bs.collapse')
5808    this.$element.trigger(startEvent)
5809    if (startEvent.isDefaultPrevented()) return
5810
5811    var dimension = this.dimension()
5812
5813    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
5814
5815    this.$element
5816      .addClass('collapsing')
5817      .removeClass('collapse in')
5818      .attr('aria-expanded', false)
5819
5820    this.$trigger
5821      .addClass('collapsed')
5822      .attr('aria-expanded', false)
5823
5824    this.transitioning = 1
5825
5826    var complete = function () {
5827      this.transitioning = 0
5828      this.$element
5829        .removeClass('collapsing')
5830        .addClass('collapse')
5831        .trigger('hidden.bs.collapse')
5832    }
5833
5834    if (!$.support.transition) return complete.call(this)
5835
5836    this.$element
5837      [dimension](0)
5838      .one('bsTransitionEnd', $.proxy(complete, this))
5839      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
5840  }
5841
5842  Collapse.prototype.toggle = function () {
5843    this[this.$element.hasClass('in') ? 'hide' : 'show']()
5844  }
5845
5846  Collapse.prototype.getParent = function () {
5847    return $(this.options.parent)
5848      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
5849      .each($.proxy(function (i, element) {
5850        var $element = $(element)
5851        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
5852      }, this))
5853      .end()
5854  }
5855
5856  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
5857    var isOpen = $element.hasClass('in')
5858
5859    $element.attr('aria-expanded', isOpen)
5860    $trigger
5861      .toggleClass('collapsed', !isOpen)
5862      .attr('aria-expanded', isOpen)
5863  }
5864
5865  function getTargetFromTrigger($trigger) {
5866    var href
5867    var target = $trigger.attr('data-target')
5868      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
5869
5870    return $(target)
5871  }
5872
5873
5874  // COLLAPSE PLUGIN DEFINITION
5875  // ==========================
5876
5877  function Plugin(option) {
5878    return this.each(function () {
5879      var $this   = $(this)
5880      var data    = $this.data('bs.collapse')
5881      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
5882
5883      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
5884      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
5885      if (typeof option == 'string') data[option]()
5886    })
5887  }
5888
5889  var old = $.fn.collapse
5890
5891  $.fn.collapse             = Plugin
5892  $.fn.collapse.Constructor = Collapse
5893
5894
5895  // COLLAPSE NO CONFLICT
5896  // ====================
5897
5898  $.fn.collapse.noConflict = function () {
5899    $.fn.collapse = old
5900    return this
5901  }
5902
5903
5904  // COLLAPSE DATA-API
5905  // =================
5906
5907  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
5908    var $this   = $(this)
5909
5910    if (!$this.attr('data-target')) e.preventDefault()
5911
5912    var $target = getTargetFromTrigger($this)
5913    var data    = $target.data('bs.collapse')
5914    var option  = data ? 'toggle' : $this.data()
5915
5916    Plugin.call($target, option)
5917  })
5918
5919}(jQuery);
5920;
5921/* ========================================================================
5922 * Bootstrap: dropdown.js v3.3.7
5923 * http://getbootstrap.com/javascript/#dropdowns
5924 * ========================================================================
5925 * Copyright 2011-2016 Twitter, Inc.
5926 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5927 * ======================================================================== */
5928
5929
5930+function ($) {
5931  'use strict';
5932
5933  // DROPDOWN CLASS DEFINITION
5934  // =========================
5935
5936  var backdrop = '.dropdown-backdrop'
5937  var toggle   = '[data-toggle="dropdown"]'
5938  var Dropdown = function (element) {
5939    $(element).on('click.bs.dropdown', this.toggle)
5940  }
5941
5942  Dropdown.VERSION = '3.3.7'
5943
5944  function getParent($this) {
5945    var selector = $this.attr('data-target')
5946
5947    if (!selector) {
5948      selector = $this.attr('href')
5949      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
5950    }
5951
5952    var $parent = selector && $(selector)
5953
5954    return $parent && $parent.length ? $parent : $this.parent()
5955  }
5956
5957  function clearMenus(e) {
5958    if (e && e.which === 3) return
5959    $(backdrop).remove()
5960    $(toggle).each(function () {
5961      var $this         = $(this)
5962      var $parent       = getParent($this)
5963      var relatedTarget = { relatedTarget: this }
5964
5965      if (!$parent.hasClass('open')) return
5966
5967      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
5968
5969      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
5970
5971      if (e.isDefaultPrevented()) return
5972
5973      $this.attr('aria-expanded', 'false')
5974      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
5975    })
5976  }
5977
5978  Dropdown.prototype.toggle = function (e) {
5979    var $this = $(this)
5980
5981    if ($this.is('.disabled, :disabled')) return
5982
5983    var $parent  = getParent($this)
5984    var isActive = $parent.hasClass('open')
5985
5986    clearMenus()
5987
5988    if (!isActive) {
5989      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
5990        // if mobile we use a backdrop because click events don't delegate
5991        $(document.createElement('div'))
5992          .addClass('dropdown-backdrop')
5993          .insertAfter($(this))
5994          .on('click', clearMenus)
5995      }
5996
5997      var relatedTarget = { relatedTarget: this }
5998      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
5999
6000      if (e.isDefaultPrevented()) return
6001
6002      $this
6003        .trigger('focus')
6004        .attr('aria-expanded', 'true')
6005
6006      $parent
6007        .toggleClass('open')
6008        .trigger($.Event('shown.bs.dropdown', relatedTarget))
6009    }
6010
6011    return false
6012  }
6013
6014  Dropdown.prototype.keydown = function (e) {
6015    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
6016
6017    var $this = $(this)
6018
6019    e.preventDefault()
6020    e.stopPropagation()
6021
6022    if ($this.is('.disabled, :disabled')) return
6023
6024    var $parent  = getParent($this)
6025    var isActive = $parent.hasClass('open')
6026
6027    if (!isActive && e.which != 27 || isActive && e.which == 27) {
6028      if (e.which == 27) $parent.find(toggle).trigger('focus')
6029      return $this.trigger('click')
6030    }
6031
6032    var desc = ' li:not(.disabled):visible a'
6033    var $items = $parent.find('.dropdown-menu' + desc)
6034
6035    if (!$items.length) return
6036
6037    var index = $items.index(e.target)
6038
6039    if (e.which == 38 && index > 0)                 index--         // up
6040    if (e.which == 40 && index < $items.length - 1) index++         // down
6041    if (!~index)                                    index = 0
6042
6043    $items.eq(index).trigger('focus')
6044  }
6045
6046
6047  // DROPDOWN PLUGIN DEFINITION
6048  // ==========================
6049
6050  function Plugin(option) {
6051    return this.each(function () {
6052      var $this = $(this)
6053      var data  = $this.data('bs.dropdown')
6054
6055      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
6056      if (typeof option == 'string') data[option].call($this)
6057    })
6058  }
6059
6060  var old = $.fn.dropdown
6061
6062  $.fn.dropdown             = Plugin
6063  $.fn.dropdown.Constructor = Dropdown
6064
6065
6066  // DROPDOWN NO CONFLICT
6067  // ====================
6068
6069  $.fn.dropdown.noConflict = function () {
6070    $.fn.dropdown = old
6071    return this
6072  }
6073
6074
6075  // APPLY TO STANDARD DROPDOWN ELEMENTS
6076  // ===================================
6077
6078  $(document)
6079    .on('click.bs.dropdown.data-api', clearMenus)
6080    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
6081    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
6082    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
6083    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
6084
6085}(jQuery);
6086;
6087/* ========================================================================
6088 * Bootstrap: modal.js v3.3.7
6089 * http://getbootstrap.com/javascript/#modals
6090 * ========================================================================
6091 * Copyright 2011-2016 Twitter, Inc.
6092 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6093 * ======================================================================== */
6094
6095
6096+function ($) {
6097  'use strict';
6098
6099  // MODAL CLASS DEFINITION
6100  // ======================
6101
6102  var Modal = function (element, options) {
6103    this.options             = options
6104    this.$body               = $(document.body)
6105    this.$element            = $(element)
6106    this.$dialog             = this.$element.find('.modal-dialog')
6107    this.$backdrop           = null
6108    this.isShown             = null
6109    this.originalBodyPad     = null
6110    this.scrollbarWidth      = 0
6111    this.ignoreBackdropClick = false
6112
6113    if (this.options.remote) {
6114      this.$element
6115        .find('.modal-content')
6116        .load(this.options.remote, $.proxy(function () {
6117          this.$element.trigger('loaded.bs.modal')
6118        }, this))
6119    }
6120  }
6121
6122  Modal.VERSION  = '3.3.7'
6123
6124  Modal.TRANSITION_DURATION = 300
6125  Modal.BACKDROP_TRANSITION_DURATION = 150
6126
6127  Modal.DEFAULTS = {
6128    backdrop: true,
6129    keyboard: true,
6130    show: true
6131  }
6132
6133  Modal.prototype.toggle = function (_relatedTarget) {
6134    return this.isShown ? this.hide() : this.show(_relatedTarget)
6135  }
6136
6137  Modal.prototype.show = function (_relatedTarget) {
6138    var that = this
6139    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
6140
6141    this.$element.trigger(e)
6142
6143    if (this.isShown || e.isDefaultPrevented()) return
6144
6145    this.isShown = true
6146
6147    this.checkScrollbar()
6148    this.setScrollbar()
6149    this.$body.addClass('modal-open')
6150
6151    this.escape()
6152    this.resize()
6153
6154    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
6155
6156    this.$dialog.on('mousedown.dismiss.bs.modal', function () {
6157      that.$element.one('mouseup.dismiss.bs.modal', function (e) {
6158        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
6159      })
6160    })
6161
6162    this.backdrop(function () {
6163      var transition = $.support.transition && that.$element.hasClass('fade')
6164
6165      if (!that.$element.parent().length) {
6166        that.$element.appendTo(that.$body) // don't move modals dom position
6167      }
6168
6169      that.$element
6170        .show()
6171        .scrollTop(0)
6172
6173      that.adjustDialog()
6174
6175      if (transition) {
6176        that.$element[0].offsetWidth // force reflow
6177      }
6178
6179      that.$element.addClass('in')
6180
6181      that.enforceFocus()
6182
6183      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
6184
6185      transition ?
6186        that.$dialog // wait for modal to slide in
6187          .one('bsTransitionEnd', function () {
6188            that.$element.trigger('focus').trigger(e)
6189          })
6190          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
6191        that.$element.trigger('focus').trigger(e)
6192    })
6193  }
6194
6195  Modal.prototype.hide = function (e) {
6196    if (e) e.preventDefault()
6197
6198    e = $.Event('hide.bs.modal')
6199
6200    this.$element.trigger(e)
6201
6202    if (!this.isShown || e.isDefaultPrevented()) return
6203
6204    this.isShown = false
6205
6206    this.escape()
6207    this.resize()
6208
6209    $(document).off('focusin.bs.modal')
6210
6211    this.$element
6212      .removeClass('in')
6213      .off('click.dismiss.bs.modal')
6214      .off('mouseup.dismiss.bs.modal')
6215
6216    this.$dialog.off('mousedown.dismiss.bs.modal')
6217
6218    $.support.transition && this.$element.hasClass('fade') ?
6219      this.$element
6220        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
6221        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
6222      this.hideModal()
6223  }
6224
6225  Modal.prototype.enforceFocus = function () {
6226    $(document)
6227      .off('focusin.bs.modal') // guard against infinite focus loop
6228      .on('focusin.bs.modal', $.proxy(function (e) {
6229        if (document !== e.target &&
6230            this.$element[0] !== e.target &&
6231            !this.$element.has(e.target).length) {
6232          this.$element.trigger('focus')
6233        }
6234      }, this))
6235  }
6236
6237  Modal.prototype.escape = function () {
6238    if (this.isShown && this.options.keyboard) {
6239      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
6240        e.which == 27 && this.hide()
6241      }, this))
6242    } else if (!this.isShown) {
6243      this.$element.off('keydown.dismiss.bs.modal')
6244    }
6245  }
6246
6247  Modal.prototype.resize = function () {
6248    if (this.isShown) {
6249      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
6250    } else {
6251      $(window).off('resize.bs.modal')
6252    }
6253  }
6254
6255  Modal.prototype.hideModal = function () {
6256    var that = this
6257    this.$element.hide()
6258    this.backdrop(function () {
6259      that.$body.removeClass('modal-open')
6260      that.resetAdjustments()
6261      that.resetScrollbar()
6262      that.$element.trigger('hidden.bs.modal')
6263    })
6264  }
6265
6266  Modal.prototype.removeBackdrop = function () {
6267    this.$backdrop && this.$backdrop.remove()
6268    this.$backdrop = null
6269  }
6270
6271  Modal.prototype.backdrop = function (callback) {
6272    var that = this
6273    var animate = this.$element.hasClass('fade') ? 'fade' : ''
6274
6275    if (this.isShown && this.options.backdrop) {
6276      var doAnimate = $.support.transition && animate
6277
6278      this.$backdrop = $(document.createElement('div'))
6279        .addClass('modal-backdrop ' + animate)
6280        .appendTo(this.$body)
6281
6282      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
6283        if (this.ignoreBackdropClick) {
6284          this.ignoreBackdropClick = false
6285          return
6286        }
6287        if (e.target !== e.currentTarget) return
6288        this.options.backdrop == 'static'
6289          ? this.$element[0].focus()
6290          : this.hide()
6291      }, this))
6292
6293      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
6294
6295      this.$backdrop.addClass('in')
6296
6297      if (!callback) return
6298
6299      doAnimate ?
6300        this.$backdrop
6301          .one('bsTransitionEnd', callback)
6302          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
6303        callback()
6304
6305    } else if (!this.isShown && this.$backdrop) {
6306      this.$backdrop.removeClass('in')
6307
6308      var callbackRemove = function () {
6309        that.removeBackdrop()
6310        callback && callback()
6311      }
6312      $.support.transition && this.$element.hasClass('fade') ?
6313        this.$backdrop
6314          .one('bsTransitionEnd', callbackRemove)
6315          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
6316        callbackRemove()
6317
6318    } else if (callback) {
6319      callback()
6320    }
6321  }
6322
6323  // these following methods are used to handle overflowing modals
6324
6325  Modal.prototype.handleUpdate = function () {
6326    this.adjustDialog()
6327  }
6328
6329  Modal.prototype.adjustDialog = function () {
6330    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
6331
6332    this.$element.css({
6333      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
6334      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
6335    })
6336  }
6337
6338  Modal.prototype.resetAdjustments = function () {
6339    this.$element.css({
6340      paddingLeft: '',
6341      paddingRight: ''
6342    })
6343  }
6344
6345  Modal.prototype.checkScrollbar = function () {
6346    var fullWindowWidth = window.innerWidth
6347    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
6348      var documentElementRect = document.documentElement.getBoundingClientRect()
6349      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
6350    }
6351    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
6352    this.scrollbarWidth = this.measureScrollbar()
6353  }
6354
6355  Modal.prototype.setScrollbar = function () {
6356    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
6357    this.originalBodyPad = document.body.style.paddingRight || ''
6358    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
6359  }
6360
6361  Modal.prototype.resetScrollbar = function () {
6362    this.$body.css('padding-right', this.originalBodyPad)
6363  }
6364
6365  Modal.prototype.measureScrollbar = function () { // thx walsh
6366    var scrollDiv = document.createElement('div')
6367    scrollDiv.className = 'modal-scrollbar-measure'
6368    this.$body.append(scrollDiv)
6369    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
6370    this.$body[0].removeChild(scrollDiv)
6371    return scrollbarWidth
6372  }
6373
6374
6375  // MODAL PLUGIN DEFINITION
6376  // =======================
6377
6378  function Plugin(option, _relatedTarget) {
6379    return this.each(function () {
6380      var $this   = $(this)
6381      var data    = $this.data('bs.modal')
6382      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
6383
6384      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
6385      if (typeof option == 'string') data[option](_relatedTarget)
6386      else if (options.show) data.show(_relatedTarget)
6387    })
6388  }
6389
6390  var old = $.fn.modal
6391
6392  $.fn.modal             = Plugin
6393  $.fn.modal.Constructor = Modal
6394
6395
6396  // MODAL NO CONFLICT
6397  // =================
6398
6399  $.fn.modal.noConflict = function () {
6400    $.fn.modal = old
6401    return this
6402  }
6403
6404
6405  // MODAL DATA-API
6406  // ==============
6407
6408  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
6409    var $this   = $(this)
6410    var href    = $this.attr('href')
6411    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
6412    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
6413
6414    if ($this.is('a')) e.preventDefault()
6415
6416    $target.one('show.bs.modal', function (showEvent) {
6417      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
6418      $target.one('hidden.bs.modal', function () {
6419        $this.is(':visible') && $this.trigger('focus')
6420      })
6421    })
6422    Plugin.call($target, option, this)
6423  })
6424
6425}(jQuery);
6426;
6427/* ========================================================================
6428 * Bootstrap: tooltip.js v3.3.7
6429 * http://getbootstrap.com/javascript/#tooltip
6430 * Inspired by the original jQuery.tipsy by Jason Frame
6431 * ========================================================================
6432 * Copyright 2011-2016 Twitter, Inc.
6433 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6434 * ======================================================================== */
6435
6436
6437+function ($) {
6438  'use strict';
6439
6440  // TOOLTIP PUBLIC CLASS DEFINITION
6441  // ===============================
6442
6443  var Tooltip = function (element, options) {
6444    this.type       = null
6445    this.options    = null
6446    this.enabled    = null
6447    this.timeout    = null
6448    this.hoverState = null
6449    this.$element   = null
6450    this.inState    = null
6451
6452    this.init('tooltip', element, options)
6453  }
6454
6455  Tooltip.VERSION  = '3.3.7'
6456
6457  Tooltip.TRANSITION_DURATION = 150
6458
6459  Tooltip.DEFAULTS = {
6460    animation: true,
6461    placement: 'top',
6462    selector: false,
6463    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
6464    trigger: 'hover focus',
6465    title: '',
6466    delay: 0,
6467    html: false,
6468    container: false,
6469    viewport: {
6470      selector: 'body',
6471      padding: 0
6472    }
6473  }
6474
6475  Tooltip.prototype.init = function (type, element, options) {
6476    this.enabled   = true
6477    this.type      = type
6478    this.$element  = $(element)
6479    this.options   = this.getOptions(options)
6480    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
6481    this.inState   = { click: false, hover: false, focus: false }
6482
6483    if (this.$element[0] instanceof document.constructor && !this.options.selector) {
6484      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
6485    }
6486
6487    var triggers = this.options.trigger.split(' ')
6488
6489    for (var i = triggers.length; i--;) {
6490      var trigger = triggers[i]
6491
6492      if (trigger == 'click') {
6493        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
6494      } else if (trigger != 'manual') {
6495        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
6496        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
6497
6498        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
6499        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
6500      }
6501    }
6502
6503    this.options.selector ?
6504      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
6505      this.fixTitle()
6506  }
6507
6508  Tooltip.prototype.getDefaults = function () {
6509    return Tooltip.DEFAULTS
6510  }
6511
6512  Tooltip.prototype.getOptions = function (options) {
6513    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
6514
6515    if (options.delay && typeof options.delay == 'number') {
6516      options.delay = {
6517        show: options.delay,
6518        hide: options.delay
6519      }
6520    }
6521
6522    return options
6523  }
6524
6525  Tooltip.prototype.getDelegateOptions = function () {
6526    var options  = {}
6527    var defaults = this.getDefaults()
6528
6529    this._options && $.each(this._options, function (key, value) {
6530      if (defaults[key] != value) options[key] = value
6531    })
6532
6533    return options
6534  }
6535
6536  Tooltip.prototype.enter = function (obj) {
6537    var self = obj instanceof this.constructor ?
6538      obj : $(obj.currentTarget).data('bs.' + this.type)
6539
6540    if (!self) {
6541      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
6542      $(obj.currentTarget).data('bs.' + this.type, self)
6543    }
6544
6545    if (obj instanceof $.Event) {
vendor: 9,753 bytes, lines 6546-6824
6546      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
6547    }
6548
6549    if (self.tip().hasClass('in') || self.hoverState == 'in') {
6550      self.hoverState = 'in'
6551      return
6552    }
6553
6554    clearTimeout(self.timeout)
6555
6556    self.hoverState = 'in'
6557
6558    if (!self.options.delay || !self.options.delay.show) return self.show()
6559
6560    self.timeout = setTimeout(function () {
6561      if (self.hoverState == 'in') self.show()
6562    }, self.options.delay.show)
6563  }
6564
6565  Tooltip.prototype.isInStateTrue = function () {
6566    for (var key in this.inState) {
6567      if (this.inState[key]) return true
6568    }
6569
6570    return false
6571  }
6572
6573  Tooltip.prototype.leave = function (obj) {
6574    var self = obj instanceof this.constructor ?
6575      obj : $(obj.currentTarget).data('bs.' + this.type)
6576
6577    if (!self) {
6578      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
6579      $(obj.currentTarget).data('bs.' + this.type, self)
6580    }
6581
6582    if (obj instanceof $.Event) {
6583      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
6584    }
6585
6586    if (self.isInStateTrue()) return
6587
6588    clearTimeout(self.timeout)
6589
6590    self.hoverState = 'out'
6591
6592    if (!self.options.delay || !self.options.delay.hide) return self.hide()
6593
6594    self.timeout = setTimeout(function () {
6595      if (self.hoverState == 'out') self.hide()
6596    }, self.options.delay.hide)
6597  }
6598
6599  Tooltip.prototype.show = function () {
6600    var e = $.Event('show.bs.' + this.type)
6601
6602    if (this.hasContent() && this.enabled) {
6603      this.$element.trigger(e)
6604
6605      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
6606      if (e.isDefaultPrevented() || !inDom) return
6607      var that = this
6608
6609      var $tip = this.tip()
6610
6611      var tipId = this.getUID(this.type)
6612
6613      this.setContent()
6614      $tip.attr('id', tipId)
6615      this.$element.attr('aria-describedby', tipId)
6616
6617      if (this.options.animation) $tip.addClass('fade')
6618
6619      var placement = typeof this.options.placement == 'function' ?
6620        this.options.placement.call(this, $tip[0], this.$element[0]) :
6621        this.options.placement
6622
6623      var autoToken = /\s?auto?\s?/i
6624      var autoPlace = autoToken.test(placement)
6625      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
6626
6627      $tip
6628        .detach()
6629        .css({ top: 0, left: 0, display: 'block' })
6630        .addClass(placement)
6631        .data('bs.' + this.type, this)
6632
6633      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
6634      this.$element.trigger('inserted.bs.' + this.type)
6635
6636      var pos          = this.getPosition()
6637      var actualWidth  = $tip[0].offsetWidth
6638      var actualHeight = $tip[0].offsetHeight
6639
6640      if (autoPlace) {
6641        var orgPlacement = placement
6642        var viewportDim = this.getPosition(this.$viewport)
6643
6644        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :
6645                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :
6646                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :
6647                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :
6648                    placement
6649
6650        $tip
6651          .removeClass(orgPlacement)
6652          .addClass(placement)
6653      }
6654
6655      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
6656
6657      this.applyPlacement(calculatedOffset, placement)
6658
6659      var complete = function () {
6660        var prevHoverState = that.hoverState
6661        that.$element.trigger('shown.bs.' + that.type)
6662        that.hoverState = null
6663
6664        if (prevHoverState == 'out') that.leave(that)
6665      }
6666
6667      $.support.transition && this.$tip.hasClass('fade') ?
6668        $tip
6669          .one('bsTransitionEnd', complete)
6670          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
6671        complete()
6672    }
6673  }
6674
6675  Tooltip.prototype.applyPlacement = function (offset, placement) {
6676    var $tip   = this.tip()
6677    var width  = $tip[0].offsetWidth
6678    var height = $tip[0].offsetHeight
6679
6680    // manually read margins because getBoundingClientRect includes difference
6681    var marginTop = parseInt($tip.css('margin-top'), 10)
6682    var marginLeft = parseInt($tip.css('margin-left'), 10)
6683
6684    // we must check for NaN for ie 8/9
6685    if (isNaN(marginTop))  marginTop  = 0
6686    if (isNaN(marginLeft)) marginLeft = 0
6687
6688    offset.top  += marginTop
6689    offset.left += marginLeft
6690
6691    // $.fn.offset doesn't round pixel values
6692    // so we use setOffset directly with our own function B-0
6693    $.offset.setOffset($tip[0], $.extend({
6694      using: function (props) {
6695        $tip.css({
6696          top: Math.round(props.top),
6697          left: Math.round(props.left)
6698        })
6699      }
6700    }, offset), 0)
6701
6702    $tip.addClass('in')
6703
6704    // check to see if placing tip in new offset caused the tip to resize itself
6705    var actualWidth  = $tip[0].offsetWidth
6706    var actualHeight = $tip[0].offsetHeight
6707
6708    if (placement == 'top' && actualHeight != height) {
6709      offset.top = offset.top + height - actualHeight
6710    }
6711
6712    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
6713
6714    if (delta.left) offset.left += delta.left
6715    else offset.top += delta.top
6716
6717    var isVertical          = /top|bottom/.test(placement)
6718    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
6719    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
6720
6721    $tip.offset(offset)
6722    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
6723  }
6724
6725  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
6726    this.arrow()
6727      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
6728      .css(isVertical ? 'top' : 'left', '')
6729  }
6730
6731  Tooltip.prototype.setContent = function () {
6732    var $tip  = this.tip()
6733    var title = this.getTitle()
6734
6735    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
6736    $tip.removeClass('fade in top bottom left right')
6737  }
6738
6739  Tooltip.prototype.hide = function (callback) {
6740    var that = this
6741    var $tip = $(this.$tip)
6742    var e    = $.Event('hide.bs.' + this.type)
6743
6744    function complete() {
6745      if (that.hoverState != 'in') $tip.detach()
6746      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
6747        that.$element
6748          .removeAttr('aria-describedby')
6749          .trigger('hidden.bs.' + that.type)
6750      }
6751      callback && callback()
6752    }
6753
6754    this.$element.trigger(e)
6755
6756    if (e.isDefaultPrevented()) return
6757
6758    $tip.removeClass('in')
6759
6760    $.support.transition && $tip.hasClass('fade') ?
6761      $tip
6762        .one('bsTransitionEnd', complete)
6763        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
6764      complete()
6765
6766    this.hoverState = null
6767
6768    return this
6769  }
6770
6771  Tooltip.prototype.fixTitle = function () {
6772    var $e = this.$element
6773    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
6774      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
6775    }
6776  }
6777
6778  Tooltip.prototype.hasContent = function () {
6779    return this.getTitle()
6780  }
6781
6782  Tooltip.prototype.getPosition = function ($element) {
6783    $element   = $element || this.$element
6784
6785    var el     = $element[0]
6786    var isBody = el.tagName == 'BODY'
6787
6788    var elRect    = el.getBoundingClientRect()
6789    if (elRect.width == null) {
6790      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
6791      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
6792    }
6793    var isSvg = window.SVGElement && el instanceof window.SVGElement
6794    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
6795    // See https://github.com/twbs/bootstrap/issues/20280
6796    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
6797    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
6798    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
6799
6800    return $.extend({}, elRect, scroll, outerDims, elOffset)
6801  }
6802
6803  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
6804    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :
6805           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
6806           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
6807        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
6808
6809  }
6810
6811  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
6812    var delta = { top: 0, left: 0 }
6813    if (!this.$viewport) return delta
6814
6815    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
6816    var viewportDimensions = this.getPosition(this.$viewport)
6817
6818    if (/right|left/.test(placement)) {
6819      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
6820      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
6821      if (topEdgeOffset < viewportDimensions.top) { // top overflow
6822        delta.top = viewportDimensions.top - topEdgeOffset
6823      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
6824        delta.top = viewportDimensions.top + viewportDimensions.height - bottom
vendor: 15,406 bytes, lines 6824-7397
6824EdgeOffset
6825      }
6826    } else {
6827      var leftEdgeOffset  = pos.left - viewportPadding
6828      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
6829      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
6830        delta.left = viewportDimensions.left - leftEdgeOffset
6831      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
6832        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
6833      }
6834    }
6835
6836    return delta
6837  }
6838
6839  Tooltip.prototype.getTitle = function () {
6840    var title
6841    var $e = this.$element
6842    var o  = this.options
6843
6844    title = $e.attr('data-original-title')
6845      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
6846
6847    return title
6848  }
6849
6850  Tooltip.prototype.getUID = function (prefix) {
6851    do prefix += ~~(Math.random() * 1000000)
6852    while (document.getElementById(prefix))
6853    return prefix
6854  }
6855
6856  Tooltip.prototype.tip = function () {
6857    if (!this.$tip) {
6858      this.$tip = $(this.options.template)
6859      if (this.$tip.length != 1) {
6860        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
6861      }
6862    }
6863    return this.$tip
6864  }
6865
6866  Tooltip.prototype.arrow = function () {
6867    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
6868  }
6869
6870  Tooltip.prototype.enable = function () {
6871    this.enabled = true
6872  }
6873
6874  Tooltip.prototype.disable = function () {
6875    this.enabled = false
6876  }
6877
6878  Tooltip.prototype.toggleEnabled = function () {
6879    this.enabled = !this.enabled
6880  }
6881
6882  Tooltip.prototype.toggle = function (e) {
6883    var self = this
6884    if (e) {
6885      self = $(e.currentTarget).data('bs.' + this.type)
6886      if (!self) {
6887        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
6888        $(e.currentTarget).data('bs.' + this.type, self)
6889      }
6890    }
6891
6892    if (e) {
6893      self.inState.click = !self.inState.click
6894      if (self.isInStateTrue()) self.enter(self)
6895      else self.leave(self)
6896    } else {
6897      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
6898    }
6899  }
6900
6901  Tooltip.prototype.destroy = function () {
6902    var that = this
6903    clearTimeout(this.timeout)
6904    this.hide(function () {
6905      that.$element.off('.' + that.type).removeData('bs.' + that.type)
6906      if (that.$tip) {
6907        that.$tip.detach()
6908      }
6909      that.$tip = null
6910      that.$arrow = null
6911      that.$viewport = null
6912      that.$element = null
6913    })
6914  }
6915
6916
6917  // TOOLTIP PLUGIN DEFINITION
6918  // =========================
6919
6920  function Plugin(option) {
6921    return this.each(function () {
6922      var $this   = $(this)
6923      var data    = $this.data('bs.tooltip')
6924      var options = typeof option == 'object' && option
6925
6926      if (!data && /destroy|hide/.test(option)) return
6927      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
6928      if (typeof option == 'string') data[option]()
6929    })
6930  }
6931
6932  var old = $.fn.tooltip
6933
6934  $.fn.tooltip             = Plugin
6935  $.fn.tooltip.Constructor = Tooltip
6936
6937
6938  // TOOLTIP NO CONFLICT
6939  // ===================
6940
6941  $.fn.tooltip.noConflict = function () {
6942    $.fn.tooltip = old
6943    return this
6944  }
6945
6946}(jQuery);
6947;
6948/* ========================================================================
6949 * Bootstrap: popover.js v3.3.7
6950 * http://getbootstrap.com/javascript/#popovers
6951 * ========================================================================
6952 * Copyright 2011-2016 Twitter, Inc.
6953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6954 * ======================================================================== */
6955
6956
6957+function ($) {
6958  'use strict';
6959
6960  // POPOVER PUBLIC CLASS DEFINITION
6961  // ===============================
6962
6963  var Popover = function (element, options) {
6964    this.init('popover', element, options)
6965  }
6966
6967  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
6968
6969  Popover.VERSION  = '3.3.7'
6970
6971  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
6972    placement: 'right',
6973    trigger: 'click',
6974    content: '',
6975    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
6976  })
6977
6978
6979  // NOTE: POPOVER EXTENDS tooltip.js
6980  // ================================
6981
6982  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
6983
6984  Popover.prototype.constructor = Popover
6985
6986  Popover.prototype.getDefaults = function () {
6987    return Popover.DEFAULTS
6988  }
6989
6990  Popover.prototype.setContent = function () {
6991    var $tip    = this.tip()
6992    var title   = this.getTitle()
6993    var content = this.getContent()
6994
6995    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
6996    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
6997      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
6998    ](content)
6999
7000    $tip.removeClass('fade top bottom left right in')
7001
7002    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
7003    // this manually by checking the contents.
7004    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
7005  }
7006
7007  Popover.prototype.hasContent = function () {
7008    return this.getTitle() || this.getContent()
7009  }
7010
7011  Popover.prototype.getContent = function () {
7012    var $e = this.$element
7013    var o  = this.options
7014
7015    return $e.attr('data-content')
7016      || (typeof o.content == 'function' ?
7017            o.content.call($e[0]) :
7018            o.content)
7019  }
7020
7021  Popover.prototype.arrow = function () {
7022    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
7023  }
7024
7025
7026  // POPOVER PLUGIN DEFINITION
7027  // =========================
7028
7029  function Plugin(option) {
7030    return this.each(function () {
7031      var $this   = $(this)
7032      var data    = $this.data('bs.popover')
7033      var options = typeof option == 'object' && option
7034
7035      if (!data && /destroy|hide/.test(option)) return
7036      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
7037      if (typeof option == 'string') data[option]()
7038    })
7039  }
7040
7041  var old = $.fn.popover
7042
7043  $.fn.popover             = Plugin
7044  $.fn.popover.Constructor = Popover
7045
7046
7047  // POPOVER NO CONFLICT
7048  // ===================
7049
7050  $.fn.popover.noConflict = function () {
7051    $.fn.popover = old
7052    return this
7053  }
7054
7055}(jQuery);
7056;
7057/* ========================================================================
7058 * Bootstrap: scrollspy.js v3.3.7
7059 * http://getbootstrap.com/javascript/#scrollspy
7060 * ========================================================================
7061 * Copyright 2011-2016 Twitter, Inc.
7062 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7063 * ======================================================================== */
7064
7065
7066+function ($) {
7067  'use strict';
7068
7069  // SCROLLSPY CLASS DEFINITION
7070  // ==========================
7071
7072  function ScrollSpy(element, options) {
7073    this.$body          = $(document.body)
7074    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
7075    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
7076    this.selector       = (this.options.target || '') + ' .nav li > a'
7077    this.offsets        = []
7078    this.targets        = []
7079    this.activeTarget   = null
7080    this.scrollHeight   = 0
7081
7082    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
7083    this.refresh()
7084    this.process()
7085  }
7086
7087  ScrollSpy.VERSION  = '3.3.7'
7088
7089  ScrollSpy.DEFAULTS = {
7090    offset: 10
7091  }
7092
7093  ScrollSpy.prototype.getScrollHeight = function () {
7094    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
7095  }
7096
7097  ScrollSpy.prototype.refresh = function () {
7098    var that          = this
7099    var offsetMethod  = 'offset'
7100    var offsetBase    = 0
7101
7102    this.offsets      = []
7103    this.targets      = []
7104    this.scrollHeight = this.getScrollHeight()
7105
7106    if (!$.isWindow(this.$scrollElement[0])) {
7107      offsetMethod = 'position'
7108      offsetBase   = this.$scrollElement.scrollTop()
7109    }
7110
7111    this.$body
7112      .find(this.selector)
7113      .map(function () {
7114        var $el   = $(this)
7115        var href  = $el.data('target') || $el.attr('href')
7116        var $href = /^#./.test(href) && $(href)
7117
7118        return ($href
7119          && $href.length
7120          && $href.is(':visible')
7121          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
7122      })
7123      .sort(function (a, b) { return a[0] - b[0] })
7124      .each(function () {
7125        that.offsets.push(this[0])
7126        that.targets.push(this[1])
7127      })
7128  }
7129
7130  ScrollSpy.prototype.process = function () {
7131    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
7132    var scrollHeight = this.getScrollHeight()
7133    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
7134    var offsets      = this.offsets
7135    var targets      = this.targets
7136    var activeTarget = this.activeTarget
7137    var i
7138
7139    if (this.scrollHeight != scrollHeight) {
7140      this.refresh()
7141    }
7142
7143    if (scrollTop >= maxScroll) {
7144      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
7145    }
7146
7147    if (activeTarget && scrollTop < offsets[0]) {
7148      this.activeTarget = null
7149      return this.clear()
7150    }
7151
7152    for (i = offsets.length; i--;) {
7153      activeTarget != targets[i]
7154        && scrollTop >= offsets[i]
7155        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
7156        && this.activate(targets[i])
7157    }
7158  }
7159
7160  ScrollSpy.prototype.activate = function (target) {
7161    this.activeTarget = target
7162
7163    this.clear()
7164
7165    var selector = this.selector +
7166      '[data-target="' + target + '"],' +
7167      this.selector + '[href="' + target + '"]'
7168
7169    var active = $(selector)
7170      .parents('li')
7171      .addClass('active')
7172
7173    if (active.parent('.dropdown-menu').length) {
7174      active = active
7175        .closest('li.dropdown')
7176        .addClass('active')
7177    }
7178
7179    active.trigger('activate.bs.scrollspy')
7180  }
7181
7182  ScrollSpy.prototype.clear = function () {
7183    $(this.selector)
7184      .parentsUntil(this.options.target, '.active')
7185      .removeClass('active')
7186  }
7187
7188
7189  // SCROLLSPY PLUGIN DEFINITION
7190  // ===========================
7191
7192  function Plugin(option) {
7193    return this.each(function () {
7194      var $this   = $(this)
7195      var data    = $this.data('bs.scrollspy')
7196      var options = typeof option == 'object' && option
7197
7198      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
7199      if (typeof option == 'string') data[option]()
7200    })
7201  }
7202
7203  var old = $.fn.scrollspy
7204
7205  $.fn.scrollspy             = Plugin
7206  $.fn.scrollspy.Constructor = ScrollSpy
7207
7208
7209  // SCROLLSPY NO CONFLICT
7210  // =====================
7211
7212  $.fn.scrollspy.noConflict = function () {
7213    $.fn.scrollspy = old
7214    return this
7215  }
7216
7217
7218  // SCROLLSPY DATA-API
7219  // ==================
7220
7221  $(window).on('load.bs.scrollspy.data-api', function () {
7222    $('[data-spy="scroll"]').each(function () {
7223      var $spy = $(this)
7224      Plugin.call($spy, $spy.data())
7225    })
7226  })
7227
7228}(jQuery);
7229;
7230/* ========================================================================
7231 * Bootstrap: tab.js v3.3.7
7232 * http://getbootstrap.com/javascript/#tabs
7233 * ========================================================================
7234 * Copyright 2011-2016 Twitter, Inc.
7235 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7236 * ======================================================================== */
7237
7238
7239+function ($) {
7240  'use strict';
7241
7242  // TAB CLASS DEFINITION
7243  // ====================
7244
7245  var Tab = function (element) {
7246    // jscs:disable requireDollarBeforejQueryAssignment
7247    this.element = $(element)
7248    // jscs:enable requireDollarBeforejQueryAssignment
7249  }
7250
7251  Tab.VERSION = '3.3.7'
7252
7253  Tab.TRANSITION_DURATION = 150
7254
7255  Tab.prototype.show = function () {
7256    var $this    = this.element
7257    var $ul      = $this.closest('ul:not(.dropdown-menu)')
7258    var selector = $this.data('target')
7259
7260    if (!selector) {
7261      selector = $this.attr('href')
7262      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
7263    }
7264
7265    if ($this.parent('li').hasClass('active')) return
7266
7267    var $previous = $ul.find('.active:last a')
7268    var hideEvent = $.Event('hide.bs.tab', {
7269      relatedTarget: $this[0]
7270    })
7271    var showEvent = $.Event('show.bs.tab', {
7272      relatedTarget: $previous[0]
7273    })
7274
7275    $previous.trigger(hideEvent)
7276    $this.trigger(showEvent)
7277
7278    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
7279
7280    var $target = $(selector)
7281
7282    this.activate($this.closest('li'), $ul)
7283    this.activate($target, $target.parent(), function () {
7284      $previous.trigger({
7285        type: 'hidden.bs.tab',
7286        relatedTarget: $this[0]
7287      })
7288      $this.trigger({
7289        type: 'shown.bs.tab',
7290        relatedTarget: $previous[0]
7291      })
7292    })
7293  }
7294
7295  Tab.prototype.activate = function (element, container, callback) {
7296    var $active    = container.find('> .active')
7297    var transition = callback
7298      && $.support.transition
7299      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
7300
7301    function next() {
7302      $active
7303        .removeClass('active')
7304        .find('> .dropdown-menu > .active')
7305          .removeClass('active')
7306        .end()
7307        .find('[data-toggle="tab"]')
7308          .attr('aria-expanded', false)
7309
7310      element
7311        .addClass('active')
7312        .find('[data-toggle="tab"]')
7313          .attr('aria-expanded', true)
7314
7315      if (transition) {
7316        element[0].offsetWidth // reflow for transition
7317        element.addClass('in')
7318      } else {
7319        element.removeClass('fade')
7320      }
7321
7322      if (element.parent('.dropdown-menu').length) {
7323        element
7324          .closest('li.dropdown')
7325            .addClass('active')
7326          .end()
7327          .find('[data-toggle="tab"]')
7328            .attr('aria-expanded', true)
7329      }
7330
7331      callback && callback()
7332    }
7333
7334    $active.length && transition ?
7335      $active
7336        .one('bsTransitionEnd', next)
7337        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
7338      next()
7339
7340    $active.removeClass('in')
7341  }
7342
7343
7344  // TAB PLUGIN DEFINITION
7345  // =====================
7346
7347  function Plugin(option) {
7348    return this.each(function () {
7349      var $this = $(this)
7350      var data  = $this.data('bs.tab')
7351
7352      if (!data) $this.data('bs.tab', (data = new Tab(this)))
7353      if (typeof option == 'string') data[option]()
7354    })
7355  }
7356
7357  var old = $.fn.tab
7358
7359  $.fn.tab             = Plugin
7360  $.fn.tab.Constructor = Tab
7361
7362
7363  // TAB NO CONFLICT
7364  // ===============
7365
7366  $.fn.tab.noConflict = function () {
7367    $.fn.tab = old
7368    return this
7369  }
7370
7371
7372  // TAB DATA-API
7373  // ============
7374
7375  var clickHandler = function (e) {
7376    e.preventDefault()
7377    Plugin.call($(this), 'show')
7378  }
7379
7380  $(document)
7381    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
7382    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
7383
7384}(jQuery);
7385;
7386/* ========================================================================
7387 * Bootstrap: transition.js v3.3.7
7388 * http://getbootstrap.com/javascript/#transitions
7389 * ========================================================================
7390 * Copyright 2011-2016 Twitter, Inc.
7391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7392 * ======================================================================== */
7393
7394
7395+function ($) {
7396  'use strict';
7397
7398  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
7399  // ============================================================
7400
7401  function transitionEnd() {
7402    var el = document.createElement('bootstrap')
7403
7404    var transEndEventNames = {
7405      WebkitTransition : 'webkitTransitionEnd',
7406      MozTransition    : 'transitionend',
7407      OTransition      : 'oTransitionEnd otransitionend',
7408      transition       : 'transitionend'
7409    }
7410
7411    for (var name in transEndEventNames) {
7412      if (el.style[name] !== undefined) {
7413        return { end: transEndEventNames[name] }
7414      }
7415    }
7416
7417    return false // explicit for ie8 (  ._.)
7418  }
7419
7420  // http://blog.alexmaccaw.com/css-transitions
7421  $.fn.emulateTransitionEnd = function (duration) {
7422    var called = false
7423    var $el = this
7424    $(this).one('bsTransitionEnd', function () { called = true })
7425    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
7426    setTimeout(callback, duration)
7427    return this
7428  }
7429
7430  $(function () {
7431    $.support.transition = transitionEnd()
7432
7433    if (!$.support.transition) return
7434
7435    $.event.special.bsTransitionEnd = {
7436      bindType: $.support.transition.end,
7437      delegateType: $.support.transition.end,
7438      handle: function (e) {
7439        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
7440      }
7441    }
7442  })
7443
7444}(jQuery);
7445;
7446/**
7447 * @file
7448 * Drupal Bootstrap object.
7449 */
7450
7451/**
7452 * All Drupal Bootstrap JavaScript APIs are contained in this namespace.
7453 *
7454 * @param {underscore} _
7455 * @param {jQuery} $
7456 * @param {Drupal} Drupal
7457 * @param {drupalSettings} drupalSettings
7458 */
7459(function (_, $, Drupal, drupalSettings) {
7460  'use strict';
7461
7462  /**
7463   * @typedef Drupal.bootstrap
7464   */
7465  var Bootstrap = {
7466    processedOnce: {},
7467    settings: drupalSettings.bootstrap || {}
7468  };
7469
7470  /**
7471   * Wraps Drupal.checkPlain() to ensure value passed isn't empty.
7472   *
7473   * Encodes special characters in a plain-text string for display as HTML.
7474   *
7475   * @param {string} str
7476   *   The string to be encoded.
7477   *
7478   * @return {string}
7479   *   The encoded string.
7480   *
7481   * @ingroup sanitization
7482   */
7483  Bootstrap.checkPlain = function (str) {
7484    return str && Drupal.checkPlain(str) || '';
7485  };
7486
7487  /**
7488   * Creates a jQuery plugin.
7489   *
7490   * @param {String} id
7491   *   A jQuery plugin identifier located in $.fn.
7492   * @param {Function} plugin
7493   *   A constructor function used to initialize the for the jQuery plugin.
7494   * @param {Boolean} [noConflict]
7495   *   Flag indicating whether or not to create a ".noConflict()" helper method
7496   *   for the plugin.
7497   */
7498  Bootstrap.createPlugin = function (id, plugin, noConflict) {
7499    // Immediately return if plugin doesn't exist.
7500    if ($.fn[id] !== void 0) {
7501      return this.fatal('Specified jQuery plugin identifier already exists: @id. Use Drupal.bootstrap.replacePlugin() instead.', {'@id': id});
7502    }
7503
7504    // Immediately return if plugin isn't a function.
7505    if (typeof plugin !== 'function') {
7506      return this.fatal('You must provide a constructor function to create a jQuery plugin "@id": @plugin', {'@id': id, '@plugin':  plugin});
7507    }
7508
7509    // Add a ".noConflict()" helper method.
7510    this.pluginNoConflict(id, plugin, noConflict);
7511
7512    $.fn[id] = plugin;
7513  };
7514
7515  /**
7516   * Diff object properties.
7517   *
7518   * @param {...Object} objects
7519   *   Two or more objects. The first object will be used to return properties
7520   *   values.
7521   *
7522   * @return {Object}
7523   *   Returns the properties of the first passed object that are not present
7524   *   in all other passed objects.
7525   */
7526  Bootstrap.diffObjects = function (objects) {
7527    var args = Array.prototype.slice.call(arguments);
7528    return _.pick(args[0], _.difference.apply(_, _.map(args, function (obj) {
7529      return Object.keys(obj);
7530    })));
7531  };
7532
7533  /**
7534   * Map of supported events by regular expression.
7535   *
7536   * @type {Object<Event|MouseEvent|KeyboardEvent|TouchEvent,RegExp>}
7537   */
7538  Bootstrap.eventMap = {
7539    Event: /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
7540    MouseEvent: /^(?:click|dblclick|mouse(?:down|enter|leave|up|over|move|out))$/,
7541    KeyboardEvent: /^(?:key(?:down|press|up))$/,
7542    TouchEvent: /^(?:touch(?:start|end|move|cancel))$/
7543  };
7544
7545  /**
7546   * Extends a jQuery Plugin.
7547   *
7548   * @param {String} id
7549   *   A jQuery plugin identifier located in $.fn.
7550   * @param {Function} callback
7551   *   A constructor function used to initialize the for the jQuery plugin.
7552   *
7553   * @return {Function|Boolean}
7554   *   The jQuery plugin constructor or FALSE if the plugin does not exist.
7555   */
7556  Bootstrap.extendPlugin = function (id, callback) {
7557    // Immediately return if plugin doesn't exist.
7558    if (typeof $.fn[id] !== 'function') {
7559      return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id':  id});
7560    }
7561
7562    // Immediately return if callback isn't a function.
7563    if (typeof callback !== 'function') {
7564      return this.fatal('You must provide a callback function to extend the jQuery plugin "@id": @callback', {'@id': id, '@callback':  callback});
7565    }
7566
7567    // Determine existing plugin constructor.
7568    var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id];
7569    var plugin = callback.apply(constructor, [this.settings]);
7570    if (!$.isPlainObject(plugin)) {
7571      return this.fatal('Returned value from callback is not a plain object that can be used to extend the jQuery plugin "@id": @obj', {'@obj':  plugin});
7572    }
7573
7574    this.wrapPluginConstructor(constructor, plugin, true);
7575
7576    return $.fn[id];
7577  };
7578
7579  Bootstrap.superWrapper = function (parent, fn) {
7580    return function () {
7581      var previousSuper = this.super;
7582      this.super = parent;
7583      var ret = fn.apply(this, arguments);
7584      if (previousSuper) {
7585        this.super = previousSuper;
7586      }
7587      else {
7588        delete this.super;
7589      }
7590      return ret;
7591    };
7592  };
7593
7594  /**
7595   * Provide a helper method for displaying when something is went wrong.
7596   *
7597   * @param {String} message
7598   *   The message to display.
7599   * @param {Object} [args]
7600   *   An arguments to use in message.
7601   *
7602   * @return {Boolean}
7603   *   Always returns FALSE.
7604   */
7605  Bootstrap.fatal = function (message, args) {
7606    if (this.settings.dev && console.warn) {
7607      for (var name in args) {
7608        if (args.hasOwnProperty(name) && typeof args[name] === 'object') {
7609          args[name] = JSON.stringify(args[name]);
7610        }
7611      }
7612      Drupal.throwError(new Error(Drupal.formatString(message, args)));
7613    }
7614    return false;
7615  };
7616
7617  /**
7618   * Intersects object properties.
7619   *
7620   * @param {...Object} objects
7621   *   Two or more objects. The first object will be used to return properties
7622   *   values.
7623   *
7624   * @return {Object}
7625   *   Returns the properties of first passed object that intersects with all
7626   *   other passed objects.
7627   */
7628  Bootstrap.intersectObjects = function (objects) {
7629    var args = Array.prototype.slice.call(arguments);
7630    return _.pick(args[0], _.intersection.apply(_, _.map(args, function (obj) {
7631      return Object.keys(obj);
7632    })));
7633  };
7634
7635  /**
7636   * Normalizes an object's values.
7637   *
7638   * @param {Object} obj
7639   *   The object to normalize.
7640   *
7641   * @return {Object}
7642   *   The normalized object.
7643   */
7644  Bootstrap.normalizeObject = function (obj) {
7645    if (!$.isPlainObject(obj)) {
7646      return obj;
7647    }
7648
7649    for (var k in obj) {
7650      if (typeof obj[k] === 'string') {
7651        if (obj[k] === 'true') {
7652          obj[k] = true;
7653        }
7654        else if (obj[k] === 'false') {
7655          obj[k] = false;
7656        }
7657        else if (obj[k].match(/^[\d-.]$/)) {
7658          obj[k] = parseFloat(obj[k]);
7659        }
7660      }
7661      else if ($.isPlainObject(obj[k])) {
7662        obj[k] = Bootstrap.normalizeObject(obj[k]);
7663      }
7664    }
7665
7666    return obj;
7667  };
7668
7669  /**
7670   * An object based once plugin (similar to jquery.once, but without the DOM).
7671   *
7672   * @param {String} id
7673   *   A unique identifier.
7674   * @param {Function} callback
7675   *   The callback to invoke if the identifier has not yet been seen.
7676   *
7677   * @return {Bootstrap}
7678   */
7679  Bootstrap.once = function (id, callback) {
7680    // Immediately return if identifier has already been processed.
7681    if (this.processedOnce[id]) {
7682      return this;
7683    }
7684    callback.call(this, this.settings);
7685    this.processedOnce[id] = true;
7686    return this;
7687  };
7688
7689  /**
7690   * Provide jQuery UI like ability to get/set options for Bootstrap plugins.
7691   *
7692   * @param {string|object} key
7693   *   A string value of the option to set, can be dot like to a nested key.
7694   *   An object of key/value pairs.
7695   * @param {*} [value]
7696   *   (optional) A value to set for key.
7697   *
7698   * @returns {*}
7699   *   - Returns nothing if key is an object or both key and value parameters
7700   *   were provided to set an option.
7701   *   - Returns the a value for a specific setting if key was provided.
7702   *   - Returns an object of key/value pairs of all the options if no key or
7703   *   value parameter was provided.
7704   *
7705   * @see https://github.com/jquery/jquery-ui/blob/master/ui/widget.js
7706   */
7707  Bootstrap.option = function (key, value) {
7708    var options = $.isPlainObject(key) ? $.extend({}, key) : {};
7709
7710    // Get all options (clone so it doesn't reference the internal object).
7711    if (arguments.length === 0) {
7712      return $.extend({}, this.options);
7713    }
7714
7715    // Get/set single option.
7716    if (typeof key === "string") {
7717      // Handle nested keys in dot notation.
7718      // e.g., "foo.bar" => { foo: { bar: true } }
7719      var parts = key.split('.');
7720      key = parts.shift();
7721      var obj = options;
7722      if (parts.length) {
7723        for (var i = 0; i < parts.length - 1; i++) {
7724          obj[parts[i]] = obj[parts[i]] || {};
7725          obj = obj[parts[i]];
7726        }
7727        key = parts.pop();
7728      }
7729
7730      // Get.
7731      if (arguments.length === 1) {
7732        return obj[key] === void 0 ? null : obj[key];
7733      }
7734
7735      // Set.
7736      obj[key] = value;
7737    }
7738
7739    // Set multiple options.
7740    $.extend(true, this.options, options);
7741  };
7742
7743  /**
7744   * Adds a ".noConflict()" helper method if needed.
7745   *
7746   * @param {String} id
7747   *   A jQuery plugin identifier located in $.fn.
7748   * @param {Function} plugin
7749   * @param {Function} plugin
7750   *   A constructor function used to initialize the for the jQuery plugin.
7751   * @param {Boolean} [noConflict]
7752   *   Flag indicating whether or not to create a ".noConflict()" helper method
7753   *   for the plugin.
7754   */
7755  Bootstrap.pluginNoConflict = function (id, plugin, noConflict) {
7756    if (plugin.noConflict === void 0 && (noConflict === void 0 || noConflict)) {
7757      var old = $.fn[id];
7758      plugin.noConflict = function () {
7759        $.fn[id] = old;
7760        return this;
7761      };
7762    }
7763  };
7764
7765  /**
7766   * Creates a handler that relays to another event name.
7767   *
7768   * @param {HTMLElement|jQuery} target
7769   *   A target element.
7770   * @param {String} name
7771   *   The name of the event to trigger.
7772   * @param {Boolean} [stopPropagation=true]
7773   *   Flag indicating whether to stop the propagation of the event, defaults
7774   *   to true.
7775   *
7776   * @return {Function}
7777   *   An even handler callback function.
7778   */
7779  Bootstrap.relayEvent = function (target, name, stopPropagation) {
7780    return function (e) {
7781      if (stopPropagation === void 0 || stopPropagation) {
7782        e.stopPropagation();
7783      }
7784      var $target = $(target);
7785      var parts = name.split('.').filter(Boolean);
7786      var type = parts.shift();
7787      e.target = $target[0];
7788      e.currentTarget = $target[0];
7789      e.namespace = parts.join('.');
7790      e.type = type;
7791      $target.trigger(e);
7792    };
7793  };
7794
7795  /**
7796   * Replaces a Bootstrap jQuery plugin definition.
7797   *
7798   * @param {String} id
7799   *   A jQuery plugin identifier located in $.fn.
7800   * @param {Function} callback
7801   *   A callback function that is immediately invoked and must return a
7802   *   function that will be used as the plugin constructor.
7803   * @param {Boolean} [noConflict]
7804   *   Flag indicating whether or not to create a ".noConflict()" helper method
7805   *   for the plugin.
7806   */
7807  Bootstrap.replacePlugin = function (id, callback, noConflict) {
7808    // Immediately return if plugin doesn't exist.
7809    if (typeof $.fn[id] !== 'function') {
7810      return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id':  id});
7811    }
7812
7813    // Immediately return if callback isn't a function.
7814    if (typeof callback !== 'function') {
7815      return this.fatal('You must provide a valid callback function to replace a jQuery plugin: @callback', {'@callback': callback});
7816    }
7817
7818    // Determine existing plugin constructor.
7819    var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id];
7820    var plugin = callback.apply(constructor, [this.settings]);
7821
7822    // Immediately return if plugin isn't a function.
7823    if (typeof plugin !== 'function') {
7824      return this.fatal('Returned value from callback is not a usable function to replace a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin});
7825    }
7826
7827    this.wrapPluginConstructor(constructor, plugin);
7828
7829    // Add a ".noConflict()" helper method.
7830    this.pluginNoConflict(id, plugin, noConflict);
7831
7832    $.fn[id] = plugin;
7833  };
7834
7835  /**
7836   * Simulates a native event on an element in the browser.
7837   *
7838   * Note: This is a fairly complete modern implementation. If things aren't
7839   * working quite the way you intend (in older browsers), you may wish to use
7840   * the jQuery.simulate plugin. If it's available, this method will defer to
7841   * that plugin.
7842   *
7843   * @see https://github.com/jquery/jquery-simulate
7844   *
7845   * @param {HTMLElement|jQuery} element
7846   *   A DOM element to dispatch event on. Note: this may be a jQuery object,
7847   *   however be aware that this will trigger the same event for each element
7848   *   inside the jQuery collection; use with caution.
7849   * @param {String|String[]} type
7850   *   The type(s) of event to simulate.
7851   * @param {Object} [options]
7852   *   An object of options to pass to the event constructor. Typically, if
7853   *   an event is being proxied, you should just pass the original event
7854   *   object here. This allows, if the browser supports it, to be a truly
7855   *   simulated event.
7856   *
7857   * @return {Boolean}
7858   *   The return value is false if event is cancelable and at least one of the
7859   *   event handlers which handled this event called Event.preventDefault().
7860   *   Otherwise it returns true.
7861   */
7862  Bootstrap.simulate = function (element, type, options) {
7863    // Handle jQuery object wrappers so it triggers on each element.
7864    var ret = true;
7865    if (element instanceof $) {
7866      element.each(function () {
7867        if (!Bootstrap.simulate(this, type, options)) {
7868          ret = false;
7869        }
7870      });
7871      return ret;
7872    }
7873
7874    if (!(element instanceof HTMLElement)) {
7875      this.fatal('Passed element must be an instance of HTMLElement, got "@type" instead.', {
7876        '@type': typeof element,
7877      });
7878    }
7879
7880    // Defer to the jQuery.simulate plugin, if it's available.
7881    if (typeof $.simulate === 'function') {
7882      new $.simulate(element, type, options);
7883      return true;
7884    }
7885
7886    var event;
7887    var ctor;
7888    var types = [].concat(type);
7889    for (var i = 0, l = types.length; i < l; i++) {
7890      type = types[i];
7891      for (var name in this.eventMap) {
7892        if (this.eventMap[name].test(type)) {
7893          ctor = name;
7894          break;
7895        }
7896      }
7897      if (!ctor) {
7898        throw new SyntaxError('Only rudimentary HTMLEvents, KeyboardEvents and MouseEvents are supported: ' + type);
7899      }
7900      var opts = {bubbles: true, cancelable: true};
7901      if (ctor === 'KeyboardEvent' || ctor === 'MouseEvent') {
7902        $.extend(opts, {ctrlKey: !1, altKey: !1, shiftKey: !1, metaKey: !1});
7903      }
7904      if (ctor === 'MouseEvent') {
7905        $.extend(opts, {button: 0, pointerX: 0, pointerY: 0, view: window});
7906      }
7907      if (options) {
7908        $.extend(opts, options);
7909      }
7910      if (typeof window[ctor] === 'function') {
7911        event = new window[ctor](type, opts);
7912        if (!element.dispatchEvent(event)) {
7913          ret = false;
7914        }
7915      }
7916      else if (document.createEvent) {
7917        event = document.createEvent(ctor);
7918        event.initEvent(type, opts.bubbles, opts.cancelable);
7919        if (!element.dispatchEvent(event)) {
7920          ret = false;
7921        }
7922      }
7923      else if (typeof element.fireEvent === 'function') {
7924        event = $.extend(document.createEventObject(), opts);
7925        if (!element.fireEvent('on' + type, event)) {
7926          ret = false;
7927        }
7928      }
7929      else if (typeof element[type]) {
7930        element[type]();
7931      }
7932    }
7933    return ret;
7934  };
7935
7936  /**
7937   * Strips HTML and returns just text.
7938   *
7939   * @param {String|Element|jQuery} html
7940   *   A string of HTML content, an Element DOM object or a jQuery object.
7941   *
7942   * @return {String}
7943   *   The text without HTML tags.
7944   *
7945   * @todo Replace with http://locutus.io/php/strings/strip_tags/
7946   */
7947  Bootstrap.stripHtml = function (html) {
7948    if (html instanceof $) {
7949      html = html.html();
7950    }
7951    else if (html instanceof Element) {
7952      html = html.innerHTML;
7953    }
7954    var tmp = document.createElement('DIV');
7955    tmp.innerHTML = html;
7956    return (tmp.textContent || tmp.innerText || '').replace(/^[\s\n\t]*|[\s\n\t]*$/, '');
7957  };
7958
7959  /**
7960   * Provide a helper method for displaying when something is unsupported.
7961   *
7962   * @param {String} type
7963   *   The type of unsupported object, e.g. method or option.
7964   * @param {String} name
7965   *   The name of the unsupported object.
7966   * @param {*} [value]
7967   *   The value of the unsupported object.
7968   */
7969  Bootstrap.unsupported = function (type, name, value) {
7970    Bootstrap.warn('Unsupported by Drupal Bootstrap: (@type) @name -> @value', {
7971      '@type': type,
7972      '@name': name,
7973      '@value': typeof value === 'object' ? JSON.stringify(value) : value
7974    });
7975  };
7976
7977  /**
7978   * Provide a helper method to display a warning.
7979   *
7980   * @param {String} message
7981   *   The message to display.
7982   * @param {Object} [args]
7983   *   Arguments to use as replacements in Drupal.formatString.
7984   */
7985  Bootstrap.warn = function (message, args) {
7986    if (this.settings.dev && console.warn) {
7987      console.warn(Drupal.formatString(message, args));
7988    }
7989  };
7990
7991  /**
7992   * Wraps a plugin with common functionality.
7993   *
7994   * @param {Function} constructor
7995   *   A plugin constructor being wrapped.
7996   * @param {Object|Function} plugin
7997   *   The plugin being wrapped.
7998   * @param {Boolean} [extend = false]
7999   *   Whether to add super extensibility.
8000   */
8001  Bootstrap.wrapPluginConstructor = function (constructor, plugin, extend) {
8002    var proto = constructor.prototype;
8003
8004    // Add a jQuery UI like option getter/setter method.
8005    var option = this.option;
8006    if (proto.option === void(0)) {
8007      proto.option = function () {
8008        return option.apply(this, arguments);
8009      };
8010    }
8011
8012    if (extend) {
8013      // Handle prototype properties separately.
8014      if (plugin.prototype !== void 0) {
8015        for (var key in plugin.prototype) {
8016          if (!plugin.prototype.hasOwnProperty(key)) continue;
8017          var value = plugin.prototype[key];
8018          if (typeof value === 'function') {
8019            proto[key] = this.superWrapper(proto[key] || function () {}, value);
8020          }
8021          else {
8022            proto[key] = $.isPlainObject(value) ? $.extend(true, {}, proto[key], value) : value;
8023          }
8024        }
8025      }
8026      delete plugin.prototype;
8027
8028      // Handle static properties.
8029      for (key in plugin) {
8030        if (!plugin.hasOwnProperty(key)) continue;
8031        value = plugin[key];
8032        if (typeof value === 'function') {
8033          constructor[key] = this.superWrapper(constructor[key] || function () {}, value);
8034        }
8035        else {
8036          constructor[key] = $.isPlainObject(value) ? $.extend(true, {}, constructor[key], value) : value;
8037        }
8038      }
8039    }
8040  };
8041
8042  // Add Bootstrap to the global Drupal object.
8043  Drupal.bootstrap = Drupal.bootstrap || Bootstrap;
8044
8045})(window._, window.jQuery, window.Drupal, window.drupalSettings);
8046;
8047(function ($, _) {
8048
8049  /**
8050   * @class Attributes
8051   *
8052   * Modifies attributes.
8053   *
8054   * @param {Object|Attributes} attributes
8055   *   An object to initialize attributes with.
8056   */
8057  var Attributes = function (attributes) {
8058    this.data = {};
8059    this.data['class'] = [];
8060    this.merge(attributes);
8061  };
8062
8063  /**
8064   * Renders the attributes object as a string to inject into an HTML element.
8065   *
8066   * @return {String}
8067   *   A rendered string suitable for inclusion in HTML markup.
8068   */
8069  Attributes.prototype.toString = function () {
8070    var output = '';
8071    var name, value;
8072    var checkPlain = function (str) {
8073      return str && str.toString().replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;') || '';
8074    };
8075    var data = this.getData();
8076    for (name in data) {
8077      if (!data.hasOwnProperty(name)) continue;
8078      value = data[name];
8079      if (_.isFunction(value)) value = value();
8080      if (_.isObject(value)) value = _.values(value);
8081      if (_.isArray(value)) value = value.join(' ');
8082      output += ' ' + checkPlain(name) + '="' + checkPlain(value) + '"';
8083    }
8084    return output;
8085  };
8086
8087  /**
8088   * Renders the Attributes object as a plain object.
8089   *
8090   * @return {Object}
8091   *   A plain object suitable for inclusion in DOM elements.
8092   */
8093  Attributes.prototype.toPlainObject = function () {
8094    var object = {};
8095    var name, value;
8096    var data = this.getData();
8097    for (name in data) {
8098      if (!data.hasOwnProperty(name)) continue;
8099      value = data[name];
8100      if (_.isFunction(value)) value = value();
8101      if (_.isObject(value)) value = _.values(value);
8102      if (_.isArray(value)) value = value.join(' ');
8103      object[name] = value;
8104    }
8105    return object;
8106  };
8107
8108  /**
8109   * Add class(es) to the array.
8110   *
8111   * @param {string|Array} value
8112   *   An individual class or an array of classes to add.
8113   *
8114   * @return {Attributes}
8115   *
8116   * @chainable
8117   */
8118  Attributes.prototype.addClass = function (value) {
8119    var args = Array.prototype.slice.call(arguments);
8120    this.data['class'] = this.sanitizeClasses(this.data['class'].concat(args));
8121    return this;
8122  };
8123
8124  /**
8125   * Returns whether the requested attribute exists.
8126   *
8127   * @param {string} name
8128   *   An attribute name to check.
8129   *
8130   * @return {boolean}
8131   *   TRUE or FALSE
8132   */
8133  Attributes.prototype.exists = function (name) {
8134    return this.data[name] !== void(0) && this.data[name] !== null;
8135  };
8136
8137  /**
8138   * Retrieve a specific attribute from the array.
8139   *
8140   * @param {string} name
8141   *   The specific attribute to retrieve.
8142   * @param {*} defaultValue
8143   *   (optional) The default value to set if the attribute does not exist.
8144   *
8145   * @return {*}
8146   *   A specific attribute value, passed by reference.
8147   */
8148  Attributes.prototype.get = function (name, defaultValue) {
8149    if (!this.exists(name)) this.data[name] = defaultValue;
8150    return this.data[name];
8151  };
8152
8153  /**
8154   * Retrieves a cloned copy of the internal attributes data object.
8155   *
8156   * @return {Object}
8157   */
8158  Attributes.prototype.getData = function () {
8159    return _.extend({}, this.data);
8160  };
8161
8162  /**
8163   * Retrieves classes from the array.
8164   *
8165   * @return {Array}
8166   *   The classes array.
8167   */
8168  Attributes.prototype.getClasses = function () {
8169    return this.get('class', []);
8170  };
8171
8172  /**
8173   * Indicates whether a class is present in the array.
8174   *
8175   * @param {string|Array} className
8176   *   The class(es) to search for.
8177   *
8178   * @return {boolean}
8179   *   TRUE or FALSE
8180   */
8181  Attributes.prototype.hasClass = function (className) {
8182    className = this.sanitizeClasses(Array.prototype.slice.call(arguments));
8183    var classes = this.getClasses();
8184    for (var i = 0, l = className.length; i < l; i++) {
8185      // If one of the classes fails, immediately return false.
8186      if (_.indexOf(classes, className[i]) === -1) {
8187        return false;
8188      }
8189    }
8190    return true;
8191  };
8192
8193  /**
8194   * Merges multiple values into the array.
8195   *
8196   * @param {Attributes|Node|jQuery|Object} object
8197   *   An Attributes object with existing data, a Node DOM element, a jQuery
8198   *   instance or a plain object where the key is the attribute name and the
8199   *   value is the attribute value.
8200   * @param {boolean} [recursive]
8201   *   Flag determining whether or not to recursively merge key/value pairs.
8202   *
8203   * @return {Attributes}
8204   *
8205   * @chainable
8206   */
8207  Attributes.prototype.merge = function (object, recursive) {
8208    // Immediately return if there is nothing to merge.
8209    if (!object) {
8210      return this;
8211    }
8212
8213    // Get attributes from a jQuery element.
8214    if (object instanceof $) {
8215      object = object[0];
8216    }
8217
8218    // Get attributes from a DOM element.
8219    if (object instanceof Node) {
8220      object = Array.prototype.slice.call(object.attributes).reduce(function (attributes, attribute) {
8221        attributes[attribute.name] = attribute.value;
8222        return attributes;
8223      }, {});
8224    }
8225    // Get attributes from an Attributes instance.
8226    else if (object instanceof Attributes) {
8227      object = object.getData();
8228    }
8229    // Otherwise, clone the object.
8230    else {
8231      object = _.extend({}, object);
8232    }
8233
8234    // By this point, there should be a valid plain object.
8235    if (!$.isPlainObject(object)) {
8236      setTimeout(function () {
8237        throw new Error('Passed object is not supported: ' + object);
8238      });
8239      return this;
8240    }
8241
8242    // Handle classes separately.
8243    if (object && object['class'] !== void 0) {
8244      this.addClass(object['class']);
8245      delete object['class'];
8246    }
8247
8248    if (recursive === void 0 || recursive) {
8249      this.data = $.extend(true, {}, this.data, object);
8250    }
8251    else {
8252      this.data = $.extend({}, this.data, object);
8253    }
8254
8255    return this;
8256  };
8257
8258  /**
8259   * Removes an attribute from the array.
8260   *
8261   * @param {string} name
8262   *   The name of the attribute to remove.
8263   *
8264   * @return {Attributes}
8265   *
8266   * @chainable
8267   */
8268  Attributes.prototype.remove = function (name) {
8269    if (this.exists(name)) delete this.data[name];
8270    return this;
8271  };
8272
8273  /**
8274   * Removes a class from the attributes array.
8275   *
8276   * @param {...string|Array} className
8277   *   An individual class or an array of classes to remove.
8278   *
8279   * @return {Attributes}
8280   *
8281   * @chainable
8282   */
8283  Attributes.prototype.removeClass = function (className) {
8284    var remove = this.sanitizeClasses(Array.prototype.slice.apply(arguments));
8285    this.data['class'] = _.without(this.getClasses(), remove);
8286    return this;
8287  };
8288
8289  /**
8290   * Replaces a class in the attributes array.
8291   *
8292   * @param {string} oldValue
8293   *   The old class to remove.
8294   * @param {string} newValue
8295   *   The new class. It will not be added if the old class does not exist.
8296   *
8297   * @return {Attributes}
8298   *
8299   * @chainable
8300   */
8301  Attributes.prototype.replaceClass = function (oldValue, newValue) {
8302    var classes = this.getClasses();
8303    var i = _.indexOf(this.sanitizeClasses(oldValue), classes);
8304    if (i >= 0) {
8305      classes[i] = newValue;
8306      this.set('class', classes);
8307    }
8308    return this;
8309  };
8310
8311  /**
8312   * Ensures classes are flattened into a single is an array and sanitized.
8313   *
8314   * @param {...String|Array} classes
8315   *   The class or classes to sanitize.
8316   *
8317   * @return {Array}
8318   *   A sanitized array of classes.
8319   */
8320  Attributes.prototype.sanitizeClasses = function (classes) {
8321    return _.chain(Array.prototype.slice.call(arguments))
8322      // Flatten in case there's a mix of strings and arrays.
8323      .flatten()
8324
8325      // Split classes that may have been added with a space as a separator.
8326      .map(function (string) {
8327        return string.split(' ');
8328      })
8329
8330      // Flatten again since it was just split into arrays.
8331      .flatten()
8332
8333      // Filter out empty items.
8334      .filter()
8335
8336      // Clean the class to ensure it's a valid class name.
8337      .map(function (value) {
8338        return Attributes.cleanClass(value);
8339      })
8340
8341      // Ensure classes are unique.
8342      .uniq()
8343
8344      // Retrieve the final value.
8345      .value();
8346  };
8347
8348  /**
8349   * Sets an attribute on the array.
8350   *
8351   * @param {string} name
8352   *   The name of the attribute to set.
8353   * @param {*} value
8354   *   The value of the attribute to set.
8355   *
8356   * @return {Attributes}
8357   *
8358   * @chainable
8359   */
8360  Attributes.prototype.set = function (name, value) {
8361    var obj = $.isPlainObject(name) ? name : {};
8362    if (typeof name === 'string') {
8363      obj[name] = value;
8364    }
8365    return this.merge(obj);
8366  };
8367
8368  /**
8369   * Prepares a string for use as a CSS identifier (element, class, or ID name).
8370   *
8371   * Note: this is essentially a direct copy from
8372   * \Drupal\Component\Utility\Html::cleanCssIdentifier
8373   *
8374   * @param {string} identifier
8375   *   The identifier to clean.
8376   * @param {Object} [filter]
8377   *   An object of string replacements to use on the identifier.
8378   *
8379   * @return {string}
8380   *   The cleaned identifier.
8381   */
8382  Attributes.cleanClass = function (identifier, filter) {
8383    filter = filter || {
8384      ' ': '-',
8385      '_': '-',
8386      '/': '-',
8387      '[': '-',
8388      ']': ''
8389    };
8390
8391    identifier = identifier.toLowerCase();
8392
8393    if (filter['__'] === void 0) {
8394      identifier = identifier.replace('__', '#DOUBLE_UNDERSCORE#');
8395    }
8396
8397    identifier = identifier.replace(Object.keys(filter), Object.keys(filter).map(function(key) { return filter[key]; }));
8398
8399    if (filter['__'] === void 0) {
8400      identifier = identifier.replace('#DOUBLE_UNDERSCORE#', '__');
8401    }
8402
8403    identifier = identifier.replace(/[^\u002D\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00A1-\uFFFF]/g, '');
8404    identifier = identifier.replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__']);
8405
8406    return identifier;
8407  };
8408
8409  /**
8410   * Creates an Attributes instance.
8411   *
8412   * @param {object|Attributes} [attributes]
8413   *   An object to initialize attributes with.
8414   *
8415   * @return {Attributes}
8416   *   An Attributes instance.
8417   *
8418   * @constructor
8419   */
8420  Attributes.create = function (attributes) {
8421    return new Attributes(attributes);
8422  };
8423
8424  window.Attributes = Attributes;
8425
8426})(window.jQuery, window._);
8427;
8428/**
8429 * @file
8430 * Theme hooks for the Drupal Bootstrap base theme.
8431 */
8432(function ($, Drupal, Bootstrap, Attributes) {
8433
8434  /**
8435   * Fallback for theming an icon if the Icon API module is not installed.
8436   */
8437  if (!Drupal.icon) Drupal.icon = { bundles: {} };
8438  if (!Drupal.theme.icon || Drupal.theme.prototype.icon) {
8439    $.extend(Drupal.theme, /** @lends Drupal.theme */ {
8440      /**
8441       * Renders an icon.
8442       *
8443       * @param {string} bundle
8444       *   The bundle which the icon belongs to.
8445       * @param {string} icon
8446       *   The name of the icon to render.
8447       * @param {object|Attributes} [attributes]
8448       *   An object of attributes to also apply to the icon.
8449       *
8450       * @returns {string}
8451       */
8452      icon: function (bundle, icon, attributes) {
8453        if (!Drupal.icon.bundles[bundle]) return '';
8454        attributes = Attributes.create(attributes).addClass('icon').set('aria-hidden', 'true');
8455        icon = Drupal.icon.bundles[bundle](icon, attributes);
8456        return '<span' + attributes + '></span>';
8457      }
8458    });
8459  }
8460
8461  /**
8462   * Callback for modifying an icon in the "bootstrap" icon bundle.
8463   *
8464   * @param {string} icon
8465   *   The icon being rendered.
8466   * @param {Attributes} attributes
8467   *   Attributes object for the icon.
8468   */
8469  Drupal.icon.bundles.bootstrap = function (icon, attributes) {
8470    attributes.addClass(['glyphicon', 'glyphicon-' + icon]);
8471  };
8472
8473  /**
8474   * Add necessary theming hooks.
8475   */
8476  $.extend(Drupal.theme, /** @lends Drupal.theme */ {
8477
8478    /**
8479     * Renders a Bootstrap AJAX glyphicon throbber.
8480     *
8481     * @returns {string}
8482     */
8483    ajaxThrobber: function () {
8484      return Drupal.theme('bootstrapIcon', 'refresh', {'class': ['ajax-throbber', 'glyphicon-spin'] });
8485    },
8486
8487    /**
8488     * Renders a button element.
8489     *
8490     * @param {object|Attributes} attributes
8491     *   An object of attributes to apply to the button. If it contains one of:
8492     *   - value: The label of the button.
8493     *   - context: The context type of Bootstrap button, can be one of:
8494     *     - default
8495     *     - primary
8496     *     - success
8497     *     - info
8498     *     - warning
8499     *     - danger
8500     *     - link
8501     *
8502     * @returns {string}
8503     */
8504    button: function (attributes) {
8505      attributes = Attributes.create(attributes).addClass('btn');
8506      var context = attributes.get('context', 'default');
8507      var label = attributes.get('value', '');
8508      attributes.remove('context').remove('value');
8509      if (!attributes.hasClass(['btn-default', 'btn-primary', 'btn-success', 'btn-info', 'btn-warning', 'btn-danger', 'btn-link'])) {
8510        attributes.addClass('btn-' + Bootstrap.checkPlain(context));
8511      }
8512
8513      // Attempt to, intelligently, provide a default button "type".
8514      if (!attributes.exists('type')) {
8515        attributes.set('type', attributes.hasClass('form-submit') ? 'submit' : 'button');
8516      }
8517
8518      return '<button' + attributes + '>' + label + '</button>';
8519    },
8520
8521    /**
8522     * Alias for "button" theme hook.
8523     *
8524     * @param {object|Attributes} attributes
8525     *   An object of attributes to apply to the button.
8526     *
8527     * @see Drupal.theme.button()
8528     *
8529     * @returns {string}
8530     */
8531    btn: function (attributes) {
8532      return Drupal.theme('button', attributes);
8533    },
8534
8535    /**
8536     * Renders a button block element.
8537     *
8538     * @param {object|Attributes} attributes
8539     *   An object of attributes to apply to the button.
8540     *
8541     * @see Drupal.theme.button()
8542     *
8543     * @returns {string}
8544     */
8545    'btn-block': function (attributes) {
8546      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-block'));
8547    },
8548
8549    /**
8550     * Renders a large button element.
8551     *
8552     * @param {object|Attributes} attributes
8553     *   An object of attributes to apply to the button.
8554     *
8555     * @see Drupal.theme.button()
8556     *
8557     * @returns {string}
8558     */
8559    'btn-lg': function (attributes) {
8560      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-lg'));
8561    },
8562
8563    /**
8564     * Renders a small button element.
8565     *
8566     * @param {object|Attributes} attributes
8567     *   An object of attributes to apply to the button.
8568     *
8569     * @see Drupal.theme.button()
8570     *
8571     * @returns {string}
8572     */
8573    'btn-sm': function (attributes) {
8574      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-sm'));
8575    },
8576
8577    /**
8578     * Renders an extra small button element.
8579     *
8580     * @param {object|Attributes} attributes
8581     *   An object of attributes to apply to the button.
8582     *
8583     * @see Drupal.theme.button()
8584     *
8585     * @returns {string}
8586     */
8587    'btn-xs': function (attributes) {
8588      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-xs'));
8589    },
8590
8591    /**
8592     * Renders a glyphicon.
8593     *
8594     * @param {string} name
8595     *   The name of the glyphicon.
8596     * @param {object|Attributes} [attributes]
8597     *   An object of attributes to apply to the icon.
8598     *
8599     * @returns {string}
8600     */
8601    bootstrapIcon: function (name, attributes) {
8602      return Drupal.theme('icon', 'bootstrap', name, attributes);
8603    }
8604
8605  });
8606
8607})(window.jQuery, window.Drupal, window.Drupal.bootstrap, window.Attributes);
8608;
8609/**
8610 * @file
8611 * Belgrade Theme JS.
8612 */
8613(function ($) {
8614
8615    'use strict';
8616
8617    /**
8618     * Close behaviour.
8619     */
8620    Drupal.behaviors.closeCartblockcontents = {
8621      attach: function (context, settings) {
8622        $('.cart-block--contents .close-btn').click(function() {
8623          $(this).parent().removeClass('cart-block--contents__expanded');
8624        });
8625      }
8626    };
8627
8628  })(jQuery);
8629
8630
8631  /*
8632   Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
8633  */
8634  (function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));
8635  if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,
8636  u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),
8637  h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),
8638  a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",
8639  y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this);
8640
8641      /*sticky settings*/
8642      (function ($) {
8643
8644
8645
8646        var window_width = jQuery( window ).width();
8647
8648        if (window_width < 992) {
8649          jQuery(".xsticky").trigger("sticky_kit:detach");
8650        } else {
8651          make_sticky();
8652        }
8653
8654        jQuery( window ).resize(function() {
8655
8656          window_width = jQuery( window ).width();
8657
8658          if (window_width < 992) {
8659            jQuery(".xsticky").trigger("sticky_kit:detach");
8660          } else {
8661            make_sticky();
8662          }
8663
8664        });
8665
8666        function make_sticky() {
8667          jQuery(".xsticky").stick_in_parent({
8668            //parent: '#main-content'
8669            offset_top: 40
8670          });
8671        }
8672
8673
8674        $('.xsticky')
8675        .on('sticky_kit:bottom', function(e) {
8676            $(this).parent().css('position', 'static');
8677        })
8678        .on('sticky_kit:unbottom', function(e) {
8679            $(this).parent().css('position', 'relative');
8680        })
8681
8682
8683      })(jQuery);
8684;
8685/*! js-cookie v3.0.0-rc.0 | MIT */
8686!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var r=e.Cookies,n=e.Cookies=t();n.noConflict=function(){return e.Cookies=r,n}}())}(this,function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}var t={read:function(e){return e.replace(/%3B/g,";")},write:function(e){return e.replace(/;/g,"%3B")}};return function r(n,i){function o(r,o,u){if("undefined"!=typeof document){"number"==typeof(u=e({},i,u)).expires&&(u.expires=new Date(Date.now()+864e5*u.expires)),u.expires&&(u.expires=u.expires.toUTCString()),r=t.write(r).replace(/=/g,"%3D"),o=n.write(String(o),r);var c="";for(var f in u)u[f]&&(c+="; "+f,!0!==u[f]&&(c+="="+u[f].split(";")[0]));return document.cookie=r+"="+o+c}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var r=document.cookie?document.cookie.split("; "):[],i={},o=0;o<r.length;o++){var u=r[o].split("="),c=u.slice(1).join("="),f=t.read(u[0]).replace(/%3D/g,"=");if(i[f]=n.read(c,f),e===f)break}return e?i[e]:i}},remove:function(t,r){o(t,"",e({},r,{expires:-1}))},withAttributes:function(t){return r(this.converter,e({},this.attributes,t))},withConverter:function(t){return r(e({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(i)},converter:{value:Object.freeze(n)}})}(t,{path:"/"})});
8687;
8688/**
8689* DO NOT EDIT THIS FILE.
8690* See the following change record for more information,
8691* https://www.drupal.org/node/2815083
8692* @preserve
8693**/
8694
8695(function ($, Drupal, cookies) {
8696  var isFunction = function isFunction(obj) {
8697    return Object.prototype.toString.call(obj) === '[object Function]';
8698  };
8699
8700  var parseCookieValue = function parseCookieValue(value, parseJson) {
8701    if (value.indexOf('"') === 0) {
8702      value = value.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
8703    }
8704
8705    try {
8706      value = decodeURIComponent(value.replace(/\+/g, ' '));
8707      return parseJson ? JSON.parse(value) : value;
8708    } catch (e) {}
8709  };
8710
8711  var reader = function reader(cookieValue, cookieName, converter, readUnsanitized, parseJson) {
8712    var value = readUnsanitized ? cookieValue : parseCookieValue(cookieValue, parseJson);
8713
8714    if (converter !== undefined && isFunction(converter)) {
8715      return converter(value, cookieName);
8716    }
8717
8718    return value;
8719  };
8720
8721  $.cookie = function (key) {
8722    var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
8723    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
8724
8725    key = key && !$.cookie.raw ? encodeURIComponent(key) : key;
8726    if (value !== undefined && !isFunction(value)) {
8727      var attributes = Object.assign({}, $.cookie.defaults, options);
8728
8729      if (typeof attributes.expires === 'string' && attributes.expires !== '') {
8730        attributes.expires = new Date(attributes.expires);
8731      }
8732
8733      var cookieSetter = cookies.withConverter({
8734        write: function write(cookieValue) {
8735          return encodeURIComponent(cookieValue);
8736        }
8737      });
8738
8739      value = $.cookie.json && !$.cookie.raw ? JSON.stringify(value) : String(value);
8740
8741      return cookieSetter.set(key, value, attributes);
8742    }
8743
8744    var userProvidedConverter = value;
8745    var cookiesShim = cookies.withConverter({
8746      read: function read(cookieValue, cookieName) {
8747        return reader(cookieValue, cookieName, userProvidedConverter, $.cookie.raw, $.cookie.json);
8748      }
8749    });
8750
8751    if (key !== undefined) {
8752      return cookiesShim.get(key);
8753    }
8754
8755    var results = cookiesShim.get();
8756    Object.keys(results).forEach(function (resultKey) {
8757      if (results[resultKey] === undefined) {
8758        delete results[resultKey];
8759      }
8760    });
8761
8762    return results;
8763  };
8764
8765  $.cookie.defaults = Object.assign({ path: '' }, cookies.defaults);
8766
8767  $.cookie.json = false;
8768
8769  $.cookie.raw = false;
8770
8771  $.removeCookie = function (key, options) {
8772    cookies.remove(key, Object.assign({}, $.cookie.defaults, options));
8773    return !cookies.get(key);
8774  };
8775})(jQuery, Drupal, window.Cookies);;
8776(function ($) {
8777
8778  Drupal.Collapsiblock = Drupal.Collapsiblock || {};
8779
8780  Drupal.behaviors.collapsiblock = {
8781
8782    attach: function (context, settings) {
8783      var cookieData = Drupal.Collapsiblock.getCookieData();
8784      var slidetype = settings.collapsiblock.slide_type;
8785      var activePages = settings.collapsiblock.active_pages;
8786      var slidespeed = parseInt(settings.collapsiblock.slide_speed, 10);
8787      $('.collapsiblock').once('collapsiblock').each(function () {
8788        var id = this.id.split("-").pop();
8789        var titleElt = $(this)[0];
8790        if (titleElt.children.length > 0) {
8791          // Status values: 1 = not collapsible, 2 = collapsible and expanded,
8792          // 3 = collapsible and collapsed, 4 = always collapsed,
8793          // 5 = always expanded
8794          var stat = $(this).data('collapsiblock-action');
8795          if (stat == 1) {
8796            return;
8797          }
8798
8799          titleElt.target = $(this).siblings().not($('.contextual'));
8800          $(titleElt)
8801          .wrapInner('<a href="#collapse-' + id + '" role="link" />')
8802          .click(function (e) {
8803            if ($(this).is('.collapsiblockCollapsed')) {
8804              $(this).removeClass('collapsiblockCollapsed');
8805              if (slidetype == 1) {
8806                $(this.target).slideDown(slidespeed).attr('aria-hidden', false);
8807              }
8808              else {
8809                $(this.target).animate({
8810                  height: 'show',
8811                  opacity: 'show'
8812                }, slidespeed);
8813              }
8814
8815              // Don't save cookie data if the block is always collapsed.
8816              if (stat != 4 && stat != 5) {
8817                cookieData[id] = 1;
8818              }
8819            }
8820            else {
8821              $(this).addClass('collapsiblockCollapsed');
8822              if (slidetype == 1) {
8823                $(this.target).slideUp(slidespeed).attr('aria-hidden', true);
8824              }
8825              else {
8826                $(this.target).animate({
8827                  height: 'hide',
8828                  opacity: 'hide'
8829                }, slidespeed);
8830              }
8831
8832              // Don't save cookie data if the block is always collapsed.
8833              if (stat != 4 && stat != 5) {
8834                cookieData[id] = 0;
8835              }
8836            }
8837            // Stringify the object in JSON format for saving in the cookie.
8838            cookieString = JSON.stringify(cookieData);
8839            $.cookie('collapsiblock', cookieString, {
8840              path: settings.basePath
8841            });
8842          });
8843          // Leave active blocks if Remember collapsed on active pages is false.
8844          // If the block is expanded, do nothing.
8845          if (stat == 4 || (cookieData[id] == 0 || (stat == 3 && cookieData[id] == undefined))) {
8846            if (!$(this).find('a.active').length || activePages === 1) {
8847              // Allow block content to assign class 'collapsiblock-force-open'
8848              // to it's content to force itself to stay open. E.g. useful if
8849              // block contains a form that was just ajaxly updated and should
8850              // be visible
8851              if (titleElt.target.hasClass('collapsiblock-force-open') || titleElt.target.find('.collapsiblock-force-open').length > 0) {
8852                return;
8853              }
8854              $(titleElt).addClass('collapsiblockCollapsed');
8855              $(titleElt.target).hide();
8856            }
8857          }
8858        }
8859      });
8860    }
8861
8862  };
8863
8864  Drupal.Collapsiblock.getCookieData = function () {
8865    if ($.cookie) {
8866      var cookieString = $.cookie('collapsiblock');
8867      return cookieString ? $.parseJSON(cookieString) : {};
8868    }
8869    else {
8870      return '';
8871    }
8872  };
8873
8874})(jQuery);
8875;
8876/**
8877 * @file
8878 * Bootstrap Popovers.
8879 */
8880
8881var Drupal = Drupal || {};
8882
8883(function ($, Drupal, Bootstrap) {
8884  "use strict";
8885
8886  var $document = $(document);
8887
8888  /**
8889   * Extend the Bootstrap Popover plugin constructor class.
8890   */
8891  Bootstrap.extendPlugin('popover', function (settings) {
8892    return {
8893      DEFAULTS: {
8894        animation: !!settings.popover_animation,
8895        autoClose: !!settings.popover_auto_close,
8896        enabled: settings.popover_enabled,
8897        html: !!settings.popover_html,
8898        placement: settings.popover_placement,
8899        selector: settings.popover_selector,
8900        trigger: settings.popover_trigger,
8901        title: settings.popover_title,
8902        content: settings.popover_content,
8903        delay: parseInt(settings.popover_delay, 10),
8904        container: settings.popover_container
8905      }
8906    };
8907  });
8908
8909  /**
8910   * Bootstrap Popovers.
8911   *
8912   * @todo This should really be properly delegated if selector option is set.
8913   */
8914  Drupal.behaviors.bootstrapPopovers = {
8915    $activePopover: null,
8916    attach: function (context) {
8917      // Immediately return if popovers are not available.
8918      if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) {
8919        return;
8920      }
8921
8922      var _this = this;
8923
8924      $document
8925        .on('show.bs.popover', '[data-toggle=popover]', function () {
8926          var $trigger = $(this);
8927          var popover = $trigger.data('bs.popover');
8928
8929          // Only keep track of clicked triggers that we're manually handling.
8930          if (popover.options.originalTrigger === 'click') {
8931            if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($trigger)) {
8932              _this.$activePopover.popover('hide');
8933            }
8934            _this.$activePopover = $trigger;
8935          }
8936        })
8937        // Unfortunately, :focusable is only made available when using jQuery
8938        // UI. While this would be the most semantic pseudo selector to use
8939        // here, jQuery UI may not always be loaded. Instead, just use :visible
8940        // here as this just needs some sort of selector here. This activates
8941        // delegate binding to elements in jQuery so it can work it's bubbling
8942        // focus magic since elements don't really propagate their focus events.
8943        // @see https://www.drupal.org/project/bootstrap/issues/3013236
8944        .on('focus.bs.popover', ':visible', function (e) {
8945          var $target = $(e.target);
8946          if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($target) && !$target.closest('.popover.in')[0]) {
8947            _this.$activePopover.popover('hide');
8948            _this.$activePopover = null;
8949          }
8950        })
8951        .on('click.bs.popover', function (e) {
8952          var $target = $(e.target);
8953          if (_this.$activePopover && _this.getOption('autoClose') && !$target.is('[data-toggle=popover]') && !$target.closest('.popover.in')[0]) {
8954            _this.$activePopover.popover('hide');
8955            _this.$activePopover = null;
8956          }
8957        })
8958        .on('keyup.bs.popover', function (e) {
8959          if (_this.$activePopover && _this.getOption('autoClose') && e.which === 27) {
8960            _this.$activePopover.popover('hide');
8961            _this.$activePopover = null;
8962          }
8963        })
8964      ;
8965
8966      var elements = $(context).find('[data-toggle=popover]').toArray();
8967      for (var i = 0; i < elements.length; i++) {
8968        var $element = $(elements[i]);
8969        var options = $.extend({}, $.fn.popover.Constructor.DEFAULTS, $element.data());
8970
8971        // Store the original trigger.
8972        options.originalTrigger = options.trigger;
8973
8974        // If the trigger is "click", then we'll handle it manually here.
8975        if (options.trigger === 'click') {
8976          options.trigger = 'manual';
8977        }
8978
8979        // Retrieve content from a target element.
8980        var target = options.target || $element.is('a[href^="#"]') && $element.attr('href');
8981        var $target = $document.find(target).clone();
8982        if (!options.content && $target[0]) {
8983          $target.removeClass('visually-hidden hidden').removeAttr('aria-hidden');
8984          options.content = $target.wrap('<div/>').parent()[options.html ? 'html' : 'text']() || '';
8985        }
8986
8987        // Initialize the popover.
8988        $element.popover(options);
8989
8990        // Handle clicks manually.
8991        if (options.originalTrigger === 'click') {
8992          // To ensure the element is bound multiple times, remove any
8993          // previously set event handler before adding another one.
8994          $element
8995            .off('click.drupal.bootstrap.popover')
8996            .on('click.drupal.bootstrap.popover', function (e) {
8997              $(this).popover('toggle');
8998              e.preventDefault();
8999              e.stopPropagation();
9000            })
9001          ;
9002        }
9003      }
9004    },
9005    detach: function (context) {
9006      // Immediately return if popovers are not available.
9007      if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) {
9008        return;
9009      }
9010
9011      // Destroy all popovers.
9012      $(context).find('[data-toggle="popover"]')
9013        .off('click.drupal.bootstrap.popover')
9014        .popover('destroy')
9015      ;
9016    },
9017    getOption: function(name, defaultValue, element) {
9018      var $element = element ? $(element) : this.$activePopover;
9019      var options = $.extend(true, {}, $.fn.popover.Constructor.DEFAULTS, ($element && $element.data('bs.popover') || {}).options);
9020      if (options[name] !== void 0) {
9021        return options[name];
9022      }
9023      return defaultValue !== void 0 ? defaultValue : void 0;
9024    }
9025  };
9026
9027})(window.jQuery, window.Drupal, window.Drupal.bootstrap);
9028;
9029/**
9030 * @file
9031 * Bootstrap Tooltips.
9032 */
9033
9034var Drupal = Drupal || {};
9035
9036(function ($, Drupal, Bootstrap) {
9037  "use strict";
9038
9039  /**
9040   * Extend the Bootstrap Tooltip plugin constructor class.
9041   */
9042  Bootstrap.extendPlugin('tooltip', function (settings) {
9043    return {
9044      DEFAULTS: {
9045        animation: !!settings.tooltip_animation,
9046        enabled: settings.tooltip_enabled,
9047        html: !!settings.tooltip_html,
9048        placement: settings.tooltip_placement,
9049        selector: settings.tooltip_selector,
9050        trigger: settings.tooltip_trigger,
9051        delay: parseInt(settings.tooltip_delay, 10),
9052        container: settings.tooltip_container
9053      }
9054    };
9055  });
9056
9057  /**
9058   * Bootstrap Tooltips.
9059   *
9060   * @todo This should really be properly delegated if selector option is set.
9061   */
9062  Drupal.behaviors.bootstrapTooltips = {
9063    attach: function (context) {
9064      // Immediately return if tooltips are not available.
9065      if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) {
9066        return;
9067      }
9068
9069      var elements = $(context).find('[data-toggle="tooltip"]').toArray();
9070      for (var i = 0; i < elements.length; i++) {
9071        var $element = $(elements[i]);
9072        var options = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, $element.data());
9073        $element.tooltip(options);
9074      }
9075    },
9076    detach: function (context) {
9077      // Immediately return if tooltips are not available.
9078      if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) {
9079        return;
9080      }
9081
9082      // Destroy all tooltips.
9083      $(context).find('[data-toggle="tooltip"]').tooltip('destroy');
9084    }
9085  };
9086
9087})(window.jQuery, window.Drupal, window.Drupal.bootstrap);
9088;
9089/**
9090 * @file
9091 * better_exposed_filters.js
9092 *
9093 * Provides some client-side functionality for the Better Exposed Filters module.
9094 */
9095
9096(function ($, Drupal, drupalSettings) {
9097  Drupal.behaviors.betterExposedFilters = {
9098    attach: function (context, settings) {
9099      // Add highlight class to checked checkboxes for better theming.
9100      $('.bef-tree input[type=checkbox], .bef-checkboxes input[type=checkbox]')
9101        // Highlight newly selected checkboxes.
9102        .change(function () {
9103          _bef_highlight(this, context);
9104        })
9105        .filter(':checked').closest('.form-item', context).addClass('highlight');
9106    }
9107  };
9108
9109  /*
9110   * Helper functions
9111   */
9112
9113  /**
9114   * Adds/Removes the highlight class from the form-item div as appropriate.
9115   */
9116  function _bef_highlight(elem, context) {
9117    $elem = $(elem, context);
9118    $elem.attr('checked')
9119      ? $elem.closest('.form-item', context).addClass('highlight')
9120      : $elem.closest('.form-item', context).removeClass('highlight');
9121  }
9122
9123})(jQuery, Drupal, drupalSettings);
9124;
9125/**
9126* DO NOT EDIT THIS FILE.
9127* See the following change record for more information,
9128* https://www.drupal.org/node/2815083
9129* @preserve
9130**/
9131
9132(function ($, _, Drupal, drupalSettings) {
9133  var cache = {};
9134  Drupal.cartFlyout = {
9135    templates: {},
9136    models: [],
9137    views: [],
9138    offcanvas: null,
9139    offcanvasBackground: null,
9140    getTemplate: function getTemplate(data) {
9141      var id = data.id;
9142      if (!cache.hasOwnProperty(id)) {
9143        cache[id] = {
9144          render: _.template(data.data)
9145        };
9146      }
9147      return cache[id];
9148    },
9149    createFlyout: function createFlyout() {
9150      var cartOffCanvas = document.createElement('aside');
9151      cartOffCanvas.id = 'cart-offcanvas';
9152      cartOffCanvas.classList.add('cart-offcanvas');
9153      cartOffCanvas.classList.add('is-closed');
9154
9155      cartOffCanvas.classList.add('cart-offcanvas--right');
9156
9157      var cartOffCanvasBg = document.createElement('div');
9158      cartOffCanvasBg.id = 'cart-offcanvas-bg';
9159      cartOffCanvasBg.classList.add('cart-offcanvas-bg');
9160      cartOffCanvasBg.classList.add('is-closed');
9161      cartOffCanvasBg.onclick = Drupal.cartFlyout.flyoutOffcanvasToggle;
9162
9163      document.body.appendChild(cartOffCanvas);
9164      document.body.appendChild(cartOffCanvasBg);
9165
9166      Drupal.cartFlyout.offcanvas = cartOffCanvas;
9167      Drupal.cartFlyout.offcanvasBackground = cartOffCanvasBg;
9168    },
9169    flyoutOffcanvasToggle: function flyoutOffcanvasToggle() {
9170      Drupal.cartFlyout.offcanvas.classList.toggle('is-open');
9171      Drupal.cartFlyout.offcanvas.classList.toggle('is-closed');
9172      Drupal.cartFlyout.offcanvasBackground.classList.toggle('is-open');
9173      Drupal.cartFlyout.offcanvasBackground.classList.toggle('is-closed');
9174    },
9175    fetchCarts: function fetchCarts() {
9176      $.get(Drupal.url('cart?_format=json'), function (json) {
9177        var count = json.reduce(function (previousValue, currentValue) {
9178          if (drupalSettings.cartFlyout.use_quantity_count) {
9179            return previousValue + currentValue.order_items.reduce(function (previousValue, currentValue) {
9180              return previousValue + parseInt(currentValue.quantity);
9181            }, 0);
9182          } else {
9183            return previousValue + currentValue.order_items.length;
9184          }
9185        }, 0);
9186
9187        _.each(Drupal.cartFlyout.models, function (model) {
9188          model.set('count', count);
9189          model.set('carts', json);
9190          model.trigger('cartsLoaded', model);
9191        });
9192      });
9193    }
9194  };
9195  Drupal.behaviors.cartFlyout = {
9196    attach: function attach(context) {
9197      Drupal.cartFlyout.templates = drupalSettings.cartFlyout.templates;
9198      $(context).find('.cart-flyout').once('cart-block-render').each(function () {
9199        Drupal.cartFlyout.createFlyout();
9200        var model = new Drupal.cartFlyout.CartBlockModel(drupalSettings.cartFlyout);
9201        Drupal.cartFlyout.models.push(model);
9202        var view = new Drupal.cartFlyout.CartBlockView({
9203          el: this,
9204          model: model
9205        });
9206        var offcanvasView = new Drupal.cartFlyout.CartOffcanvasView({
9207          el: Drupal.cartFlyout.offcanvas,
9208          model: model
9209        });
9210        Drupal.cartFlyout.views.push(view);
9211        Drupal.cartFlyout.views.push(offcanvasView);
9212        Drupal.cartFlyout.fetchCarts();
9213      });
9214    }
9215  };
9216})(jQuery, _, Drupal, drupalSettings);;
9217/**
9218* DO NOT EDIT THIS FILE.
9219* See the following change record for more information,
9220* https://www.drupal.org/node/2815083
9221* @preserve
9222**/
9223
9224(function (Backbone, Drupal) {
9225  Drupal.cartFlyout.CartBlockModel = Backbone.Model.extend({
9226    defaults: {
9227      icon: '',
9228
9229      count: 0,
9230
9231      carts: [],
9232
9233      countText: {
9234        //singular: '@count item',
9235        //plural: '@count items'
9236        singular: Drupal.t('@count item'),
9237        plural: Drupal.t('@count items')
9238      },
9239
9240      url: '',
9241
9242      links: ['<a href="' + Drupal.url('cart') + '">' + Drupal.t('View cart') + '</a>']
9243    },
9244    getUrl: function getUrl() {
9245      return this.get('url');
9246    },
9247    getIcon: function getIcon() {
9248      return this.get('icon');
9249    },
9250    getCount: function getCount() {
9251      return this.get('count');
9252    },
9253    getCountPlural: function getCountPlural() {
9254      return this.get('countText').plural;
9255    },
9256    getCountSingular: function getCountSingular() {
9257      return this.get('countText').singular;
9258    },
9259    getLinks: function getLinks() {
9260      return this.get('links');
9261    },
9262    getCarts: function getCarts() {
9263      return this.get('carts').filter(function (cart) {
9264        return cart.order_items.length > 0;
9265      });
9266    }
9267  });
9268})(Backbone, Drupal);;
9269/**
9270* DO NOT EDIT THIS FILE.
9271* See the following change record for more information,
9272* https://www.drupal.org/node/2815083
9273* @preserve
9274**/
9275
9276(function (Backbone, Drupal) {
9277  Drupal.cartFlyout.CartBlockView = Backbone.View.extend({
9278    initialize: function initialize() {
9279      this.listenTo(this.model, 'cartsLoaded', this.render);
9280    },
9281
9282    events: {
9283      'click .cart-block--link__expand': 'offcanvasOpen'
9284    },
9285    offcanvasOpen: function offcanvasOpen(event) {
9286      event.preventDefault();
9287
9288      if (this.model.getCount() > 0) {
9289        Drupal.cartFlyout.flyoutOffcanvasToggle();
9290      }
9291    },
9292    render: function render() {
9293      var template = Drupal.cartFlyout.getTemplate({
9294        id: 'commerce_cart_flyout_block',
9295        data: this.model.attributes.templates.block
9296      });
9297      this.$el.html(template.render({
9298        url: this.model.getUrl(),
9299        count_text: Drupal.formatPlural(this.model.getCount(), this.model.getCountSingular(), this.model.getCountPlural())
9300      }));
9301      var icon = new Drupal.cartFlyout.CartIconView({
9302        el: this.$el.find('.cart-block--summary__icon'),
9303        model: this.model
9304      });
9305      icon.render();
9306
9307      Drupal.attachBehaviors();
9308    }
9309  });
9310  Drupal.cartFlyout.CartIconView = Backbone.View.extend({
9311    render: function render() {
9312      var template = Drupal.cartFlyout.getTemplate({
9313        id: 'commerce_cart_js_block_icon',
9314        data: this.model.attributes.templates.icon
9315      });
9316      this.$el.html(template.render({
9317        icon: this.model.getIcon()
9318      }));
9319    }
9320  });
9321})(Backbone, Drupal);;
9322/**
9323* DO NOT EDIT THIS FILE.
9324* See the following change record for more information,
9325* https://www.drupal.org/node/2815083
9326* @preserve
9327**/
9328
9329(function ($, Backbone, Drupal) {
9330  Drupal.cartFlyout.CartOffcanvasView = Backbone.View.extend({
9331    initialize: function initialize() {
9332      this.listenTo(this.model, 'cartsLoaded', this.render);
9333    },
9334
9335    events: {
9336      'click .cart-block--offcanvas-cart-table__remove button': 'removeItem',
9337      'click .cart--cart-offcanvas__close button': 'closeOffCanvas'
9338    },
9339    closeOffCanvas: function closeOffCanvas() {
9340      Drupal.cartFlyout.flyoutOffcanvasToggle();
9341    },
9342    removeItem: function removeItem(e) {
9343      e.preventDefault();
9344      var target = JSON.parse(e.currentTarget.value);
9345      var endpoint = Drupal.url('cart/' + target[0] + '/items/' + target[1] + '?_format=json');
9346      $.ajax({
9347        url: endpoint,
9348        method: 'DELETE'
9349      }).done(function () {
9350        return Drupal.cartFlyout.fetchCarts();
9351      });
9352    },
9353    render: function render() {
9354      Drupal.detachBehaviors(this.$el[0]);
9355
9356      var template = Drupal.cartFlyout.getTemplate({
9357        id: 'commerce_cart_flyout_offcanvas',
9358        data: Drupal.cartFlyout.templates.offcanvas
9359      });
9360      this.$el.html(template.render({
9361        count: this.model.getCount(),
9362        links: this.model.getLinks()
9363      }));
9364      var contents = new Drupal.cartFlyout.CartContentsView({
9365        el: this.$el.find('.cart-block--offcanvas-contents__items'),
9366        model: this.model
9367      });
9368      contents.render();
9369      Drupal.attachBehaviors(this.$el[0]);
9370    }
9371  });
9372  Drupal.cartFlyout.CartContentsView = Backbone.View.extend({
9373    render: function render() {
9374      var carts = this.model.getCarts();
9375      var template = Drupal.cartFlyout.getTemplate({
9376        id: 'commerce_cart_flyout_offcanvas_contents',
9377        data: Drupal.cartFlyout.templates.offcanvas_contents
9378      });
9379      this.$el.html(template.render({
9380        carts: carts
9381      }));
9382
9383      this.$el.find('[data-cart-contents]').each(function (k) {
9384
9385        var contents = new Drupal.cartFlyout.CartContentsItemsView({
9386          el: this,
9387          model: carts[k]
9388        });
9389        contents.render();
9390      });
9391    }
9392  });
9393  Drupal.cartFlyout.CartContentsItemsView = Backbone.View.extend({
9394    events: {
9395      'change .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'onQuantityChange',
9396      'blur .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'doUpdateCart',
9397      'keypress .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'onKeypress',
9398      'click .cart-block--offcanvas-contents__update': 'onUpdateCart'
9399    },
9400    onQuantityChange: function onQuantityChange(e) {
9401      var targetDelta = e.target.dataset.key;
9402      var value = e.target.value >= 1 ? e.target.value : "1.00";
9403      this.model.order_items[targetDelta].quantity = parseInt(value);
9404    },
9405    onUpdateCart: function onUpdateCart(event) {
9406      event.preventDefault();
9407      this.doUpdateCart();
9408    },
9409    onKeypress: function onKeypress(event) {
9410      if (event.keyCode === 13) {
9411        event.target.blur();
9412        event.preventDefault();
9413      }
9414    },
9415    doUpdateCart: function doUpdateCart() {
9416      var endpoint = Drupal.url('cart/' + this.model.order_id + '/items?_format=json');
9417
9418      var body = {};
9419      for (var index = 0; index < this.model.order_items.length; index++) {
9420        var orderItem = this.model.order_items[index];
9421        body[orderItem.order_item_id] = {
9422          quantity: orderItem.quantity
9423        };
9424      }
9425
9426      $.ajax({
9427        url: endpoint,
9428        method: 'PATCH',
9429        data: JSON.stringify(body),
9430        contentType: 'application/json;',
9431        dataType: 'json'
9432      }).done(function () {
9433        return Drupal.cartFlyout.fetchCarts();
9434      });
9435    },
9436    render: function render() {
9437      var template = Drupal.cartFlyout.getTemplate({
9438        id: 'commerce_cart_flyout_offcanvas_contents_items',
9439        data: Drupal.cartFlyout.templates.offcanvas_contents_items
9440      });
9441      this.$el.html(template.render({
9442        cart: this.model
9443      }));
9444    }
9445  });
9446})(jQuery, Backbone, Drupal);;
9447/**
9448* DO NOT EDIT THIS FILE.
9449* See the following change record for more information,
9450* https://www.drupal.org/node/2815083
9451* @preserve
9452**/
9453
9454Drupal.debounce = function (func, wait, immediate) {
9455  var timeout = void 0;
9456  var result = void 0;
9457  return function () {
9458    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
9459      args[_key] = arguments[_key];
9460    }
9461
9462    var context = this;
9463    var later = function later() {
9464      timeout = null;
9465      if (!immediate) {
9466        result = func.apply(context, args);
9467      }
9468    };
9469    var callNow = immediate && !timeout;
9470    clearTimeout(timeout);
9471    timeout = setTimeout(later, wait);
9472    if (callNow) {
9473      result = func.apply(context, args);
9474    }
9475    return result;
9476  };
9477};;
9478!function(i,n,s){"use strict";function l(l,t){function a(i){if(g.find(".b-lazy:not(.b-loaded)").length){var s=g.find(i?".slide:not(.slick-cloned) .b-lazy:not(.b-loaded)":".slick-active .b-lazy:not(.b-loaded)");s.length||(s=g.find(".slick-cloned .b-lazy:not(.b-loaded)")),s.length&&n.blazy.init.load(s)}}function e(){b&&r(),y&&a(!1)}function o(n){var s=i(n),l=s.closest(".slide")||s.closest(".unslick");s.parentsUntil(l).removeClass(function(i,n){return(n.match(/(\S+)loading/g)||[]).join(" ")});var t=s.closest(".media--background");t.length&&t.find("> img").length&&(t.css("background-image","url("+s.attr("src")+")"),t.find("> img").remove(),t.removeAttr("data-lazy"))}function d(){g.children().sort(function(){return.5-Math.random()}).each(function(){g.append(this)})}function c(i){var n=i.slideCount<=i.options.slidesToShow,s=n||!1===i.options.arrows;if(g.attr("id")===i.$slider.attr("id")){i.options.centerPadding&&"0"!==i.options.centerPadding||i.$list.css("padding",""),n&&i.$slideTrack.width()<=i.$slider.width()&&i.$slideTrack.css({left:"",transform:""});var l=g.find(".b-loaded ~ .b-loader");l.length&&l.remove(),p[s?"addClass":"removeClass"]("visually-hidden")}}function r(){g.removeClass("is-paused"),g.find(".is-playing").length&&g.find(".is-playing").removeClass("is-playing").find(".media__icon--close").click()}function u(){g.addClass("is-paused").slick("slickPause")}function f(s){return _?{}:{slide:s.slide,lazyLoad:s.lazyLoad,dotsClass:s.dotsClass,rtl:s.rtl,prevArrow:i(".slick-prev",p),nextArrow:i(".slick-next",p),appendArrows:p,customPaging:function(i,l){var t=i.$slides.eq(l).find("[data-thumb]")||null,a='<img alt="'+n.t(t.find("img").attr("alt"))+'" src="'+t.data("thumb")+'">',e=t.length&&s.dotsClass.indexOf("thumbnail")>0?'<div class="slick-dots__thumbnail">'+a+"</div>":"",o=i.defaults.customPaging(i,l);return e?o.add(e):o}}}var k,g=i("> .slick__slider",t).length?i("> .slick__slider",t):i(t),p=i("> .slick__arrow",t),h=g.data("slick")?i.extend({},s.slick,g.data("slick")):i.extend({},s.slick),m=!("array"!==i.type(h.responsive)||!h.responsive.length)&&h.responsive,v=h.appendDots,y="blazy"===h.lazyLoad&&n.blazy,b=g.find(".media--player").length,_=g.hasClass("unslick");if(_||(h.appendDots=".slick__arrow"===v?p:v||i(g)),m)for(k in m)Object.prototype.hasOwnProperty.call(m,k)&&"unslick"!==m[k].settings&&(m[k].settings=i.extend({},s.slick,f(h),m[k].settings));g.data("slick",h),h=g.data("slick"),function(){h.randomize&&!g.hasClass("slick-initiliazed")&&d(),_||g.on("init.sl",function(s,l){".slick__arrow"===v&&i(l.$dots).insertAfter(l.$prevArrow);var t=g.find(".slick-cloned.slick-active .b-lazy:not(.b-loaded)");y&&t.length&&n.blazy.init.load(t)}),y?g.on("beforeChange.sl",function(){a(!0)}):i(".media--loading",g).closest(".slide__content").addClass("is-loading"),g.on("setPosition.sl",function(i,n){c(n)})}(),g.slick(f(h)),function(){g.parent().on("click.sl",".slick-down",function(n){n.preventDefault();var s=i(this);i("html, body").stop().animate({scrollTop:i(s.data("target")).offset().top-(s.data("offset")||0)},800,"easeOutQuad"in i.easing&&h.easing?h.easing:"swing")}),h.mouseWheel&&g.on("mousewheel.sl",function(i,n){return i.preventDefault(),g.slick(n<0?"slickNext":"slickPrev")}),y||g.on("lazyLoaded lazyLoadError",function(i,n,s){o(s)}),g.on("afterChange.sl",e),b&&(g.on("click.sl",".media__icon--close",r),g.on("click.sl",".media__icon--play",u))}(),_&&g.slick("unslick"),i(t).addClass("slick--initialized")}n.behaviors.slick={attach:function(n){i(".slick",n).once("slick").each(l)}}}(jQuery,Drupal,drupalSettings);
9479;
9480/**
9481 * @file
9482 * Dropdown language selector js.
9483 */
9484
9485(function ($, Drupal) {
9486  'use strict';
9487
9488  Drupal.behaviors.dropdownLanguagesSelector = {
9489    attach: function (context, settings) {
9490      $('.dropdown-language-item .active-language', context).once('dropdown-language-selector')
9491        .click(function (e) {
9492          var $wrapper = $(this).closest('.dropbutton-wrapper');
9493          if ($wrapper.length > 0) {
9494            e.preventDefault();
9495            e.stopPropagation();
9496            $wrapper.toggleClass('open');
9497          }
9498        });
9499    }
9500  };
9501
9502})(jQuery, Drupal);
9503;
9504/**
9505 * @file
9506 * Provides an event handler for hidden elements in dropdown menus.
9507 */
9508
9509(function ($, Drupal, Bootstrap) {
9510  'use strict';
9511
9512  /**
9513   * The list of supported events to proxy.
9514   *
9515   * @type {Array}
9516   */
9517  var events = [
9518    // MouseEvent.
9519    'click', 'dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mouseup', 'mouseover', 'mousemove', 'mouseout',
9520
9521    // KeyboardEvent.
9522    'keypress', 'keydown', 'keyup'
9523  ];
9524
9525  /**
9526   * Bootstrap dropdown behaviors.
9527   *
9528   * Proxy any dropdown element events that should actually be fired on the
9529   * original target (e.g. button, submits, etc.). This allows any registered
9530   * event callbacks to be fired as they were intended (despite the fact that
9531   * the markup has been changed to work with Bootstrap).
9532   *
9533   * @see \Drupal\bootstrap\Plugin\Preprocess\BootstrapDropdown::preprocessLinks
9534   *
9535   * @type {Drupal~behavior#bootstrapDropdown}
9536   */
9537  Drupal.behaviors.bootstrapDropdown = {
9538    attach: function (context) {
9539      var elements = context.querySelectorAll('.dropdown [data-dropdown-target]');
9540      for (var k in elements) {
9541        if (!elements.hasOwnProperty(k)) {
9542          continue;
9543        }
9544        var element = elements[k];
9545        for (var i = 0, l = events.length; i < l; i++) {
9546          var event = events[i];
9547          element.removeEventListener(event, this.proxyEvent);
9548          element.addEventListener(event, this.proxyEvent);
9549        }
9550      }
9551    },
9552
9553    /**
9554     * Proxy event handler for bootstrap dropdowns.
9555     *
9556     * @param {Event} e
9557     *   The event object.
9558     */
9559    proxyEvent: function (e) {
9560      // Ignore tabbing.
9561      if (e.type.match(/^key/) && (e.which === 9 || e.keyCode === 9)) {
9562        return;
9563      }
9564      var target = e.currentTarget.dataset && e.currentTarget.dataset.dropdownTarget || e.currentTarget.getAttribute('data-dropdown-target');
9565      if (target) {
9566        e.preventDefault();
9567        e.stopPropagation();
9568        var element = target && target !== '#' && document.querySelectorAll(target)[0];
9569        if (element) {
9570          Bootstrap.simulate(element, e.type, e);
9571        }
9572        else if (Bootstrap.settings.dev && window.console && !e.type.match(/^mouse/)) {
9573          window.console.debug('[Drupal Bootstrap] Could not find a the target:', target);
9574        }
9575      }
9576    }
9577  }
9578
9579})(jQuery, Drupal, Drupal.bootstrap);
9580;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.