{"version":3,"sources":["node_modules/jquery/dist/jquery.slim.js","node_modules/bootstrap/dist/js/bootstrap.min.js"],"sourcesContent":["/*!\n * jQuery JavaScript Library v3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T19:00Z\n */\"use strict\";(function(global,factory){\"use strict\";if(typeof module === \"object\" && typeof module.exports === \"object\"){ // For CommonJS and CommonJS-like environments where a proper `window`\n// is present, execute the factory and get jQuery.\n// For environments that do not have a `window` with a `document`\n// (such as Node.js), expose a factory as module.exports.\n// This accentuates the need for the creation of a real `window`.\n// e.g. var jQuery = require(\"jquery\")(window);\n// See ticket #14549 for more info.\nmodule.exports = global.document?factory(global,true):function(w){if(!w.document){throw new Error(\"jQuery requires a window with a document\");}return factory(w);};}else {factory(global);} // Pass this if window is not defined yet\n})(typeof window !== \"undefined\"?window:undefined,function(window,noGlobal){ // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";var arr=[];var document=window.document;var getProto=Object.getPrototypeOf;var _slice=arr.slice;var concat=arr.concat;var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};function DOMEval(code,doc){doc = doc || document;var script=doc.createElement(\"script\");script.text = code;doc.head.appendChild(script).parentNode.removeChild(script);} /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\nvar version=\"3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\", // Define a local copy of jQuery\njQuery=function jQuery(selector,context){ // The jQuery object is actually just the init constructor 'enhanced'\n// Need init if jQuery is called (just allow error to be thrown if not included)\nreturn new jQuery.fn.init(selector,context);}, // Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nrtrim=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, // Matches dashed string for camelizing\nrmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g, // Used by jQuery.camelCase as callback to replace()\nfcamelCase=function fcamelCase(all,letter){return letter.toUpperCase();};jQuery.fn = jQuery.prototype = { // The current version of jQuery being used\njquery:version,constructor:jQuery, // The default length of a jQuery object is 0\nlength:0,toArray:function toArray(){return _slice.call(this);}, // Get the Nth element in the matched element set OR\n// Get the whole matched element set as a clean array\nget:function get(num){ // Return all the elements in a clean array\nif(num == null){return _slice.call(this);} // Return just the one element from the set\nreturn num < 0?this[num + this.length]:this[num];}, // Take an array of elements and push it onto the stack\n// (returning the new matched element set)\npushStack:function pushStack(elems){ // Build a new jQuery matched element set\nvar ret=jQuery.merge(this.constructor(),elems); // Add the old object onto the stack (as a reference)\nret.prevObject = this; // Return the newly-formed element set\nreturn ret;}, // Execute a callback for every element in the matched set.\neach:function each(callback){return jQuery.each(this,callback);},map:function map(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},slice:function slice(){return this.pushStack(_slice.apply(this,arguments));},first:function first(){return this.eq(0);},last:function last(){return this.eq(-1);},eq:function eq(i){var len=this.length,j=+i + (i < 0?len:0);return this.pushStack(j >= 0 && j < len?[this[j]]:[]);},end:function end(){return this.prevObject || this.constructor();}, // For internal use only.\n// Behaves like an Array's method, not like a jQuery method.\npush:push,sort:arr.sort,splice:arr.splice};jQuery.extend = jQuery.fn.extend = function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0] || {},i=1,length=arguments.length,deep=false; // Handle a deep copy situation\nif(typeof target === \"boolean\"){deep = target; // Skip the boolean and the target\ntarget = arguments[i] || {};i++;} // Handle case when target is a string or something (possible in deep copy)\nif(typeof target !== \"object\" && !jQuery.isFunction(target)){target = {};} // Extend jQuery itself if only one argument is passed\nif(i === length){target = this;i--;}for(;i < length;i++) { // Only deal with non-null/undefined values\nif((options = arguments[i]) != null){ // Extend the base object\nfor(name in options) {src = target[name];copy = options[name]; // Prevent never-ending loop\nif(target === copy){continue;} // Recurse if we're merging plain objects or arrays\nif(deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))){if(copyIsArray){copyIsArray = false;clone = src && Array.isArray(src)?src:[];}else {clone = src && jQuery.isPlainObject(src)?src:{};} // Never move original objects, clone them\ntarget[name] = jQuery.extend(deep,clone,copy); // Don't bring in undefined values\n}else if(copy !== undefined){target[name] = copy;}}}} // Return the modified object\nreturn target;};jQuery.extend({ // Unique for each copy of jQuery on the page\nexpando:\"jQuery\" + (version + Math.random()).replace(/\\D/g,\"\"), // Assume jQuery is ready without the ready module\nisReady:true,error:function error(msg){throw new Error(msg);},noop:function noop(){},isFunction:function isFunction(obj){return jQuery.type(obj) === \"function\";},isWindow:function isWindow(obj){return obj != null && obj === obj.window;},isNumeric:function isNumeric(obj){ // As of jQuery 3.0, isNumeric is limited to\n// strings and numbers (primitives or objects)\n// that can be coerced to finite numbers (gh-2662)\nvar type=jQuery.type(obj);return (type === \"number\" || type === \"string\") &&  // parseFloat NaNs numeric-cast false positives (\"\")\n// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n// subtraction forces infinities to NaN\n!isNaN(obj - parseFloat(obj));},isPlainObject:function isPlainObject(obj){var proto,Ctor; // Detect obvious negatives\n// Use toString instead of jQuery.type to catch host objects\nif(!obj || toString.call(obj) !== \"[object Object]\"){return false;}proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\nif(!proto){return true;} // Objects with prototype are plain iff they were constructed by a global Object function\nCtor = hasOwn.call(proto,\"constructor\") && proto.constructor;return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;},isEmptyObject:function isEmptyObject(obj){ /* eslint-disable no-unused-vars */ // See https://github.com/eslint/eslint/issues/6125\nvar name;for(name in obj) {return false;}return true;},type:function type(obj){if(obj == null){return obj + \"\";} // Support: Android <=2.3 only (functionish RegExp)\nreturn typeof obj === \"object\" || typeof obj === \"function\"?class2type[toString.call(obj)] || \"object\":typeof obj;}, // Evaluates a script in a global context\nglobalEval:function globalEval(code){DOMEval(code);}, // Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 13\n// Microsoft forgot to hump their vendor prefix (#9572)\ncamelCase:function camelCase(string){return string.replace(rmsPrefix,\"ms-\").replace(rdashAlpha,fcamelCase);},each:function each(obj,callback){var length,i=0;if(isArrayLike(obj)){length = obj.length;for(;i < length;i++) {if(callback.call(obj[i],i,obj[i]) === false){break;}}}else {for(i in obj) {if(callback.call(obj[i],i,obj[i]) === false){break;}}}return obj;}, // Support: Android <=4.0 only\ntrim:function trim(text){return text == null?\"\":(text + \"\").replace(rtrim,\"\");}, // results is for internal usage only\nmakeArray:function makeArray(arr,results){var ret=results || [];if(arr != null){if(isArrayLike(Object(arr))){jQuery.merge(ret,typeof arr === \"string\"?[arr]:arr);}else {push.call(ret,arr);}}return ret;},inArray:function inArray(elem,arr,i){return arr == null?-1:indexOf.call(arr,elem,i);}, // Support: Android <=4.0 only, PhantomJS 1 only\n// push.apply(_, arraylike) throws on ancient WebKit\nmerge:function merge(first,second){var len=+second.length,j=0,i=first.length;for(;j < len;j++) {first[i++] = second[j];}first.length = i;return first;},grep:function grep(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert; // Go through the array, only saving the items\n// that pass the validator function\nfor(;i < length;i++) {callbackInverse = !callback(elems[i],i);if(callbackInverse !== callbackExpect){matches.push(elems[i]);}}return matches;}, // arg is for internal usage only\nmap:function map(elems,callback,arg){var length,value,i=0,ret=[]; // Go through the array, translating each of the items to their new values\nif(isArrayLike(elems)){length = elems.length;for(;i < length;i++) {value = callback(elems[i],i,arg);if(value != null){ret.push(value);}} // Go through every key on the object,\n}else {for(i in elems) {value = callback(elems[i],i,arg);if(value != null){ret.push(value);}}} // Flatten any nested arrays\nreturn concat.apply([],ret);}, // A global GUID counter for objects\nguid:1, // Bind a function to a context, optionally partially applying any\n// arguments.\nproxy:function proxy(fn,context){var tmp,args,proxy;if(typeof context === \"string\"){tmp = fn[context];context = fn;fn = tmp;} // Quick check to determine if target is callable, in the spec\n// this throws a TypeError, but we will just return undefined.\nif(!jQuery.isFunction(fn)){return undefined;} // Simulated bind\nargs = _slice.call(arguments,2);proxy = function(){return fn.apply(context || this,args.concat(_slice.call(arguments)));}; // Set the guid of unique handler to the same of original handler, so it can be removed\nproxy.guid = fn.guid = fn.guid || jQuery.guid++;return proxy;},now:Date.now, // jQuery.support is not used in Core but other projects attach their\n// properties to it so it needs to exist.\nsupport:support});if(typeof Symbol === \"function\"){jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];} // Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(i,name){class2type[\"[object \" + name + \"]\"] = name.toLowerCase();});function isArrayLike(obj){ // Support: real iOS 8.2 only (not reproducible in simulator)\n// `in` check used to prevent JIT error (gh-2145)\n// hasOwn isn't used here due to false negatives\n// regarding Nodelist length in IE\nvar length=!!obj && \"length\" in obj && obj.length,type=jQuery.type(obj);if(type === \"function\" || jQuery.isWindow(obj)){return false;}return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;}var Sizzle= /*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */(function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate, // Local document vars\nsetDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains, // Instance-specific data\nexpando=\"sizzle\" + 1 * new Date(),preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function sortOrder(a,b){if(a === b){hasDuplicate = true;}return 0;}, // Instance methods\nhasOwn=({}).hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice, // Use a stripped-down indexOf as it's faster than native\n// https://jsperf.com/thor-indexof-vs-for/5\nindexOf=function indexOf(list,elem){var i=0,len=list.length;for(;i < len;i++) {if(list[i] === elem){return i;}}return -1;},booleans=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\", // Regular expressions\n// http://www.w3.org/TR/css3-selectors/#whitespace\nwhitespace=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\nidentifier=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\nattributes=\"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +  // Operator (capture 2)\n\"*([*^$|!~]?=)\" + whitespace +  // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",pseudos=\":(\" + identifier + \")(?:\\\\((\" +  // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n// 1. quoted (capture 3; capture 4 or capture 5)\n\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +  // 2. simple (capture 6)\n\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +  // 3. anything else (capture 2)\n\".*\" + \")\\\\)|)\", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\nrwhitespace=new RegExp(whitespace + \"+\",\"g\"),rtrim=new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\"g\"),rcomma=new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),rcombinators=new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),rattributeQuotes=new RegExp(\"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\",\"g\"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp(\"^\" + identifier + \"$\"),matchExpr={\"ID\":new RegExp(\"^#(\" + identifier + \")\"),\"CLASS\":new RegExp(\"^\\\\.(\" + identifier + \")\"),\"TAG\":new RegExp(\"^(\" + identifier + \"|[*])\"),\"ATTR\":new RegExp(\"^\" + attributes),\"PSEUDO\":new RegExp(\"^\" + pseudos),\"CHILD\":new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\",\"i\"),\"bool\":new RegExp(\"^(?:\" + booleans + \")$\",\"i\"), // For use in libraries implementing .is()\n// We use this for POS matching in `select`\n\"needsContext\":new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\",\"i\")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\\d$/i,rnative=/^[^{]+\\{\\s*\\[native \\w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors\nrquickExpr=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,rsibling=/[+~]/, // CSS escapes\n// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\nrunescape=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\",\"ig\"),funescape=function funescape(_,escaped,escapedWhitespace){var high=\"0x\" + escaped - 0x10000; // NaN means non-codepoint\n// Support: Firefox<24\n// Workaround erroneous numeric interpretation of +\"0x\"\nreturn high !== high || escapedWhitespace?escaped:high < 0? // BMP codepoint\nString.fromCharCode(high + 0x10000): // Supplemental Plane codepoint (surrogate pair)\nString.fromCharCode(high >> 10 | 0xD800,high & 0x3FF | 0xDC00);}, // CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nrcssescape=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,fcssescape=function fcssescape(ch,asCodePoint){if(asCodePoint){ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\nif(ch === \"\\0\"){return \"�\";} // Control characters and (dependent upon position) numbers get escaped as code points\nreturn ch.slice(0,-1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";} // Other potentially-special ASCII characters get backslash-escaped\nreturn \"\\\\\" + ch;}, // Used for iframes\n// See setDocument()\n// Removing the function wrapper causes a \"Permission Denied\"\n// error in IE\nunloadHandler=function unloadHandler(){setDocument();},disabledAncestor=addCombinator(function(elem){return elem.disabled === true && (\"form\" in elem || \"label\" in elem);},{dir:\"parentNode\",next:\"legend\"}); // Optimize for push.apply( _, NodeList )\ntry{push.apply(arr = slice.call(preferredDoc.childNodes),preferredDoc.childNodes); // Support: Android<4.0\n// Detect silently failing push.apply\narr[preferredDoc.childNodes.length].nodeType;}catch(e) {push = {apply:arr.length? // Leverage slice if possible\nfunction(target,els){push_native.apply(target,slice.call(els));}: // Support: IE<9\nfunction(target,els){var j=target.length,i=0; // Can't trust NodeList.length\nwhile(target[j++] = els[i++]) {}target.length = j - 1;}};}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document\nnodeType=context?context.nodeType:9;results = results || []; // Return early from calls with invalid selector or context\nif(typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11){return results;} // Try to shortcut find operations (as opposed to filters) in HTML documents\nif(!seed){if((context?context.ownerDocument || context:preferredDoc) !== document){setDocument(context);}context = context || document;if(documentIsHTML){ // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n// (excepting DocumentFragment context, where the methods don't exist)\nif(nodeType !== 11 && (match = rquickExpr.exec(selector))){ // ID selector\nif(m = match[1]){ // Document context\nif(nodeType === 9){if(elem = context.getElementById(m)){ // Support: IE, Opera, Webkit\n// TODO: identify versions\n// getElementById can match elements by name instead of ID\nif(elem.id === m){results.push(elem);return results;}}else {return results;} // Element context\n}else { // Support: IE, Opera, Webkit\n// TODO: identify versions\n// getElementById can match elements by name instead of ID\nif(newContext && (elem = newContext.getElementById(m)) && contains(context,elem) && elem.id === m){results.push(elem);return results;}} // Type selector\n}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results; // Class selector\n}else if((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results;}} // Take advantage of querySelectorAll\nif(support.qsa && !compilerCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector))){if(nodeType !== 1){newContext = context;newSelector = selector; // qSA looks outside Element context, which is not what we want\n// Thanks to Andrew Dupont for this workaround technique\n// Support: IE <=8\n// Exclude object elements\n}else if(context.nodeName.toLowerCase() !== \"object\"){ // Capture the context ID, setting it first if necessary\nif(nid = context.getAttribute(\"id\")){nid = nid.replace(rcssescape,fcssescape);}else {context.setAttribute(\"id\",nid = expando);} // Prefix every selector in the list\ngroups = tokenize(selector);i = groups.length;while(i--) {groups[i] = \"#\" + nid + \" \" + toSelector(groups[i]);}newSelector = groups.join(\",\"); // Expand context for sibling selectors\nnewContext = rsibling.test(selector) && testContext(context.parentNode) || context;}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results;}catch(qsaError) {}finally {if(nid === expando){context.removeAttribute(\"id\");}}}}}} // All others\nreturn select(selector.replace(rtrim,\"$1\"),context,results,seed);} /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */function createCache(){var keys=[];function cache(key,value){ // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\nif(keys.push(key + \" \") > Expr.cacheLength){ // Only keep the most recent entries\ndelete cache[keys.shift()];}return cache[key + \" \"] = value;}return cache;} /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */function markFunction(fn){fn[expando] = true;return fn;} /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */function assert(fn){var el=document.createElement(\"fieldset\");try{return !!fn(el);}catch(e) {return false;}finally { // Remove from its parent by default\nif(el.parentNode){el.parentNode.removeChild(el);} // release memory in IE\nel = null;}} /**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */function addHandle(attrs,handler){var arr=attrs.split(\"|\"),i=arr.length;while(i--) {Expr.attrHandle[arr[i]] = handler;}} /**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */function siblingCheck(a,b){var cur=b && a,diff=cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\nif(diff){return diff;} // Check if b follows a\nif(cur){while(cur = cur.nextSibling) {if(cur === b){return -1;}}}return a?1:-1;} /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name === \"input\" && elem.type === type;};} /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return (name === \"input\" || name === \"button\") && elem.type === type;};} /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */function createDisabledPseudo(disabled){ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\nreturn function(elem){ // Only certain elements can match :enabled or :disabled\n// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\nif(\"form\" in elem){ // Check for inherited disabledness on relevant non-disabled elements:\n// * listed form-associated elements in a disabled fieldset\n//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n// * option elements in a disabled optgroup\n//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n// All such elements have a \"form\" property.\nif(elem.parentNode && elem.disabled === false){ // Option elements defer to a parent optgroup if present\nif(\"label\" in elem){if(\"label\" in elem.parentNode){return elem.parentNode.disabled === disabled;}else {return elem.disabled === disabled;}} // Support: IE 6 - 11\n// Use the isDisabled shortcut property to check for disabled fieldset ancestors\nreturn elem.isDisabled === disabled ||  // Where there is no isDisabled, check manually\n/* jshint -W018 */elem.isDisabled !== !disabled && disabledAncestor(elem) === disabled;}return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n// even exist on them, let alone have a boolean value.\n}else if(\"label\" in elem){return elem.disabled === disabled;} // Remaining elements are neither :enabled nor :disabled\nreturn false;};} /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */function createPositionalPseudo(fn){return markFunction(function(argument){argument = +argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length; // Match elements found at the specified indexes\nwhile(i--) {if(seed[j = matchIndexes[i]]){seed[j] = !(matches[j] = seed[j]);}}});});} /**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */function testContext(context){return context && typeof context.getElementsByTagName !== \"undefined\" && context;} // Expose support vars for convenience\nsupport = Sizzle.support = {}; /**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */isXML = Sizzle.isXML = function(elem){ // documentElement is verified for cases where it doesn't yet exist\n// (such as loading iframes in IE - #4833)\nvar documentElement=elem && (elem.ownerDocument || elem).documentElement;return documentElement?documentElement.nodeName !== \"HTML\":false;}; /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */setDocument = Sizzle.setDocument = function(node){var hasCompare,subWindow,doc=node?node.ownerDocument || node:preferredDoc; // Return early if doc is invalid or already selected\nif(doc === document || doc.nodeType !== 9 || !doc.documentElement){return document;} // Update global variables\ndocument = doc;docElem = document.documentElement;documentIsHTML = !isXML(document); // Support: IE 9-11, Edge\n// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\nif(preferredDoc !== document && (subWindow = document.defaultView) && subWindow.top !== subWindow){ // Support: IE 11, Edge\nif(subWindow.addEventListener){subWindow.addEventListener(\"unload\",unloadHandler,false); // Support: IE 9 - 10 only\n}else if(subWindow.attachEvent){subWindow.attachEvent(\"onunload\",unloadHandler);}} /* Attributes\n\t---------------------------------------------------------------------- */ // Support: IE<8\n// Verify that getAttribute really returns attributes and not properties\n// (excepting IE8 booleans)\nsupport.attributes = assert(function(el){el.className = \"i\";return !el.getAttribute(\"className\");}); /* getElement(s)By*\n\t---------------------------------------------------------------------- */ // Check if getElementsByTagName(\"*\") returns only elements\nsupport.getElementsByTagName = assert(function(el){el.appendChild(document.createComment(\"\"));return !el.getElementsByTagName(\"*\").length;}); // Support: IE<9\nsupport.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n// Check if getElementById returns elements by name\n// The broken getElementById methods don't pick up programmatically-set names,\n// so use a roundabout getElementsByName test\nsupport.getById = assert(function(el){docElem.appendChild(el).id = expando;return !document.getElementsByName || !document.getElementsByName(expando).length;}); // ID filter and find\nif(support.getById){Expr.filter[\"ID\"] = function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute(\"id\") === attrId;};};Expr.find[\"ID\"] = function(id,context){if(typeof context.getElementById !== \"undefined\" && documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[];}};}else {Expr.filter[\"ID\"] = function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");return node && node.value === attrId;};}; // Support: IE 6 - 7 only\n// getElementById is not reliable as a find shortcut\nExpr.find[\"ID\"] = function(id,context){if(typeof context.getElementById !== \"undefined\" && documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){ // Verify the id attribute\nnode = elem.getAttributeNode(\"id\");if(node && node.value === id){return [elem];} // Fall back on getElementsByName\nelems = context.getElementsByName(id);i = 0;while(elem = elems[i++]) {node = elem.getAttributeNode(\"id\");if(node && node.value === id){return [elem];}}}return [];}};} // Tag\nExpr.find[\"TAG\"] = support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName !== \"undefined\"){return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n}else if(support.qsa){return context.querySelectorAll(tag);}}:function(tag,context){var elem,tmp=[],i=0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\nresults=context.getElementsByTagName(tag); // Filter out possible comments\nif(tag === \"*\"){while(elem = results[i++]) {if(elem.nodeType === 1){tmp.push(elem);}}return tmp;}return results;}; // Class\nExpr.find[\"CLASS\"] = support.getElementsByClassName && function(className,context){if(typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML){return context.getElementsByClassName(className);}}; /* QSA/matchesSelector\n\t---------------------------------------------------------------------- */ // QSA and matchesSelector support\n// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\nrbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n// We allow this because of a bug in IE8/9 that throws an error\n// whenever `document.activeElement` is accessed on an iframe\n// So, we allow :focus to pass through QSA all the time to avoid the IE error\n// See https://bugs.jquery.com/ticket/13378\nrbuggyQSA = [];if(support.qsa = rnative.test(document.querySelectorAll)){ // Build QSA regex\n// Regex strategy adopted from Diego Perini\nassert(function(el){ // Select is set to empty string on purpose\n// This is to test IE's treatment of not explicitly\n// setting a boolean content attribute,\n// since its presence should be enough\n// https://bugs.jquery.com/ticket/12359\ndocElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n// Nothing should be selected when empty strings follow ^= or $= or *=\n// The test attribute must be unknown in Opera but \"safe\" for WinRT\n// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\nif(el.querySelectorAll(\"[msallowcapture^='']\").length){rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");} // Support: IE8\n// Boolean attributes and \"value\" are not treated correctly\nif(!el.querySelectorAll(\"[selected]\").length){rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");} // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\nif(!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length){rbuggyQSA.push(\"~=\");} // Webkit/Opera - :checked should return selected option elements\n// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n// IE8 throws error here and will not see later tests\nif(!el.querySelectorAll(\":checked\").length){rbuggyQSA.push(\":checked\");} // Support: Safari 8+, iOS 8+\n// https://bugs.webkit.org/show_bug.cgi?id=136851\n// In-page `selector#id sibling-combinator selector` fails\nif(!el.querySelectorAll(\"a#\" + expando + \"+*\").length){rbuggyQSA.push(\".#.+[+~]\");}});assert(function(el){el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n// The type and name attributes are restricted during .innerHTML assignment\nvar input=document.createElement(\"input\");input.setAttribute(\"type\",\"hidden\");el.appendChild(input).setAttribute(\"name\",\"D\"); // Support: IE8\n// Enforce case-sensitivity of name attribute\nif(el.querySelectorAll(\"[name=d]\").length){rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");} // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n// IE8 throws error here and will not see later tests\nif(el.querySelectorAll(\":enabled\").length !== 2){rbuggyQSA.push(\":enabled\",\":disabled\");} // Support: IE9-11+\n// IE's :disabled selector does not pick up the children of disabled fieldsets\ndocElem.appendChild(el).disabled = true;if(el.querySelectorAll(\":disabled\").length !== 2){rbuggyQSA.push(\":enabled\",\":disabled\");} // Opera 10-11 does not throw on post-comma invalid pseudos\nel.querySelectorAll(\"*,:x\");rbuggyQSA.push(\",.*:\");});}if(support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)){assert(function(el){ // Check to see if it's possible to do matchesSelector\n// on a disconnected node (IE 9)\nsupport.disconnectedMatch = matches.call(el,\"*\"); // This should fail with an exception\n// Gecko does not error, returns false instead\nmatches.call(el,\"[s!='']:x\");rbuggyMatches.push(\"!=\",pseudos);});}rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\")); /* Contains\n\t---------------------------------------------------------------------- */hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n// Purposefully self-exclusive\n// As in, an element does not contain itself\ncontains = hasCompare || rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType === 9?a.documentElement:a,bup=b && b.parentNode;return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains?adown.contains(bup):a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));}:function(a,b){if(b){while(b = b.parentNode) {if(b === a){return true;}}}return false;}; /* Sorting\n\t---------------------------------------------------------------------- */ // Document order sorting\nsortOrder = hasCompare?function(a,b){ // Flag for duplicate removal\nif(a === b){hasDuplicate = true;return 0;} // Sort on method existence if only one input has compareDocumentPosition\nvar compare=!a.compareDocumentPosition - !b.compareDocumentPosition;if(compare){return compare;} // Calculate position if both inputs belong to the same document\ncompare = (a.ownerDocument || a) === (b.ownerDocument || b)?a.compareDocumentPosition(b): // Otherwise we know they are disconnected\n1; // Disconnected nodes\nif(compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare){ // Choose the first element that is related to our preferred document\nif(a === document || a.ownerDocument === preferredDoc && contains(preferredDoc,a)){return -1;}if(b === document || b.ownerDocument === preferredDoc && contains(preferredDoc,b)){return 1;} // Maintain original order\nreturn sortInput?indexOf(sortInput,a) - indexOf(sortInput,b):0;}return compare & 4?-1:1;}:function(a,b){ // Exit early if the nodes are identical\nif(a === b){hasDuplicate = true;return 0;}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b]; // Parentless nodes are either documents or disconnected\nif(!aup || !bup){return a === document?-1:b === document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a) - indexOf(sortInput,b):0; // If the nodes are siblings, we can do a quick check\n}else if(aup === bup){return siblingCheck(a,b);} // Otherwise we need full lists of their ancestors for comparison\ncur = a;while(cur = cur.parentNode) {ap.unshift(cur);}cur = b;while(cur = cur.parentNode) {bp.unshift(cur);} // Walk down the tree looking for a discrepancy\nwhile(ap[i] === bp[i]) {i++;}return i? // Do a sibling check if the nodes have a common ancestor\nsiblingCheck(ap[i],bp[i]): // Otherwise nodes in our document sort first\nap[i] === preferredDoc?-1:bp[i] === preferredDoc?1:0;};return document;};Sizzle.matches = function(expr,elements){return Sizzle(expr,null,null,elements);};Sizzle.matchesSelector = function(elem,expr){ // Set document vars if needed\nif((elem.ownerDocument || elem) !== document){setDocument(elem);} // Make sure that attribute selectors are quoted\nexpr = expr.replace(rattributeQuotes,\"='$1']\");if(support.matchesSelector && documentIsHTML && !compilerCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr); // IE 9's matchesSelector returns false on disconnected nodes\nif(ret || support.disconnectedMatch ||  // As well, disconnected nodes are said to be in a document\n// fragment in IE 9\nelem.document && elem.document.nodeType !== 11){return ret;}}catch(e) {}}return Sizzle(expr,document,null,[elem]).length > 0;};Sizzle.contains = function(context,elem){ // Set document vars if needed\nif((context.ownerDocument || context) !== document){setDocument(context);}return contains(context,elem);};Sizzle.attr = function(elem,name){ // Set document vars if needed\nif((elem.ownerDocument || elem) !== document){setDocument(elem);}var fn=Expr.attrHandle[name.toLowerCase()], // Don't get fooled by Object.prototype properties (jQuery #13807)\nval=fn && hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val !== undefined?val:support.attributes || !documentIsHTML?elem.getAttribute(name):(val = elem.getAttributeNode(name)) && val.specified?val.value:null;};Sizzle.escape = function(sel){return (sel + \"\").replace(rcssescape,fcssescape);};Sizzle.error = function(msg){throw new Error(\"Syntax error, unrecognized expression: \" + msg);}; /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */Sizzle.uniqueSort = function(results){var elem,duplicates=[],j=0,i=0; // Unless we *know* we can detect duplicates, assume their presence\nhasDuplicate = !support.detectDuplicates;sortInput = !support.sortStable && results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem = results[i++]) {if(elem === results[i]){j = duplicates.push(i);}}while(j--) {results.splice(duplicates[j],1);}} // Clear input after sorting to release objects\n// See https://github.com/jquery/sizzle/pull/225\nsortInput = null;return results;}; /**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */getText = Sizzle.getText = function(elem){var node,ret=\"\",i=0,nodeType=elem.nodeType;if(!nodeType){ // If no nodeType, this is expected to be an array\nwhile(node = elem[i++]) { // Do not traverse comment nodes\nret += getText(node);}}else if(nodeType === 1 || nodeType === 9 || nodeType === 11){ // Use textContent for elements\n// innerText usage removed for consistency of new lines (jQuery #11153)\nif(typeof elem.textContent === \"string\"){return elem.textContent;}else { // Traverse its children\nfor(elem = elem.firstChild;elem;elem = elem.nextSibling) {ret += getText(elem);}}}else if(nodeType === 3 || nodeType === 4){return elem.nodeValue;} // Do not include comment or processing instruction nodes\nreturn ret;};Expr = Sizzle.selectors = { // Can be adjusted by the user\ncacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:true},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:true},\"~\":{dir:\"previousSibling\"}},preFilter:{\"ATTR\":function ATTR(match){match[1] = match[1].replace(runescape,funescape); // Move the given value to match[3] whether quoted or unquoted\nmatch[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape,funescape);if(match[2] === \"~=\"){match[3] = \" \" + match[3] + \" \";}return match.slice(0,4);},\"CHILD\":function CHILD(match){ /* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/match[1] = match[1].toLowerCase();if(match[1].slice(0,3) === \"nth\"){ // nth-* requires argument\nif(!match[3]){Sizzle.error(match[0]);} // numeric x and y parameters for Expr.filter.CHILD\n// remember that false/true cast respectively to 0/1\nmatch[4] = +(match[4]?match[5] + (match[6] || 1):2 * (match[3] === \"even\" || match[3] === \"odd\"));match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n}else if(match[3]){Sizzle.error(match[0]);}return match;},\"PSEUDO\":function PSEUDO(match){var excess,unquoted=!match[6] && match[2];if(matchExpr[\"CHILD\"].test(match[0])){return null;} // Accept quoted arguments as-is\nif(match[3]){match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n}else if(unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\nexcess = tokenize(unquoted,true)) && ( // advance to the next closing parenthesis\nexcess = unquoted.indexOf(\")\",unquoted.length - excess) - unquoted.length)){ // excess is a negative index\nmatch[0] = match[0].slice(0,excess);match[2] = unquoted.slice(0,excess);} // Return only captures needed by the pseudo filter method (type and argument)\nreturn match.slice(0,3);}},filter:{\"TAG\":function TAG(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector === \"*\"?function(){return true;}:function(elem){return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;};},\"CLASS\":function CLASS(className){var pattern=classCache[className + \" \"];return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className,function(elem){return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");});},\"ATTR\":function ATTR(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result == null){return operator === \"!=\";}if(!operator){return true;}result += \"\";return operator === \"=\"?result === check:operator === \"!=\"?result !== check:operator === \"^=\"?check && result.indexOf(check) === 0:operator === \"*=\"?check && result.indexOf(check) > -1:operator === \"$=\"?check && result.slice(-check.length) === check:operator === \"~=\"?(\" \" + result.replace(rwhitespace,\" \") + \" \").indexOf(check) > -1:operator === \"|=\"?result === check || result.slice(0,check.length + 1) === check + \"-\":false;};},\"CHILD\":function CHILD(type,what,argument,first,last){var simple=type.slice(0,3) !== \"nth\",forward=type.slice(-4) !== \"last\",ofType=what === \"of-type\";return first === 1 && last === 0? // Shortcut for :nth-*(n)\nfunction(elem){return !!elem.parentNode;}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple !== forward?\"nextSibling\":\"previousSibling\",parent=elem.parentNode,name=ofType && elem.nodeName.toLowerCase(),useCache=!xml && !ofType,diff=false;if(parent){ // :(first|last|only)-(child|of-type)\nif(simple){while(dir) {node = elem;while(node = node[dir]) {if(ofType?node.nodeName.toLowerCase() === name:node.nodeType === 1){return false;}} // Reverse direction for :only-* (if we haven't yet done so)\nstart = dir = type === \"only\" && !start && \"nextSibling\";}return true;}start = [forward?parent.firstChild:parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\nif(forward && useCache){ // Seek `elem` from a previously-cached index\n// ...in a gzip-friendly way\nnode = parent;outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n// Defend against cloned attroperties (jQuery gh-1709)\nuniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});cache = uniqueCache[type] || [];nodeIndex = cache[0] === dirruns && cache[1];diff = nodeIndex && cache[2];node = nodeIndex && parent.childNodes[nodeIndex];while(node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\ndiff = nodeIndex = 0) || start.pop()) { // When found, cache indexes on `parent` and break\nif(node.nodeType === 1 && ++diff && node === elem){uniqueCache[type] = [dirruns,nodeIndex,diff];break;}}}else { // Use previously-cached element index if available\nif(useCache){ // ...in a gzip-friendly way\nnode = elem;outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n// Defend against cloned attroperties (jQuery gh-1709)\nuniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});cache = uniqueCache[type] || [];nodeIndex = cache[0] === dirruns && cache[1];diff = nodeIndex;} // xml :nth-child(...)\n// or :nth-last-child(...) or :nth(-last)?-of-type(...)\nif(diff === false){ // Use the same loop as above to seek `elem` from the start\nwhile(node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {if((ofType?node.nodeName.toLowerCase() === name:node.nodeType === 1) && ++diff){ // Cache the index of each encountered element\nif(useCache){outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n// Defend against cloned attroperties (jQuery gh-1709)\nuniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});uniqueCache[type] = [dirruns,diff];}if(node === elem){break;}}}}} // Incorporate the offset, then check against cycle size\ndiff -= last;return diff === first || diff % first === 0 && diff / first >= 0;}};},\"PSEUDO\":function PSEUDO(pseudo,argument){ // pseudo-class names are case-insensitive\n// http://www.w3.org/TR/selectors/#pseudo-classes\n// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n// Remember that setFilters inherits from pseudos\nvar args,fn=Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n// arguments are needed to create the filter function\n// just as Sizzle does\nif(fn[expando]){return fn(argument);} // But maintain support for old signatures\nif(fn.length > 1){args = [pseudo,pseudo,\"\",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--) {idx = indexOf(seed,matched[i]);seed[idx] = !(matches[idx] = matched[i]);}}):function(elem){return fn(elem,0,args);};}return fn;}},pseudos:{ // Potentially complex pseudos\n\"not\":markFunction(function(selector){ // Trim the selector passed to compile\n// to avoid treating leading and trailing\n// spaces as combinators\nvar input=[],results=[],matcher=compile(selector.replace(rtrim,\"$1\"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length; // Match elements unmatched by `matcher`\nwhile(i--) {if(elem = unmatched[i]){seed[i] = !(matches[i] = elem);}}}):function(elem,context,xml){input[0] = elem;matcher(input,null,xml,results); // Don't keep the element (issue #299)\ninput[0] = null;return !results.pop();};}),\"has\":markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length > 0;};}),\"contains\":markFunction(function(text){text = text.replace(runescape,funescape);return function(elem){return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;};}), // \"Whether an element is represented by a :lang() selector\n// is based solely on the element's language value\n// being equal to the identifier C,\n// or beginning with the identifier C immediately followed by \"-\".\n// The matching of C against the element's language value is performed case-insensitively.\n// The identifier C does not have to be a valid language name.\"\n// http://www.w3.org/TR/selectors/#lang-pseudo\n\"lang\":markFunction(function(lang){ // lang value must be a valid identifier\nif(!ridentifier.test(lang || \"\")){Sizzle.error(\"unsupported lang: \" + lang);}lang = lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do {if(elemLang = documentIsHTML?elem.lang:elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")){elemLang = elemLang.toLowerCase();return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;}}while((elem = elem.parentNode) && elem.nodeType === 1);return false;};}), // Miscellaneous\n\"target\":function target(elem){var hash=window.location && window.location.hash;return hash && hash.slice(1) === elem.id;},\"root\":function root(elem){return elem === docElem;},\"focus\":function focus(elem){return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);}, // Boolean properties\n\"enabled\":createDisabledPseudo(false),\"disabled\":createDisabledPseudo(true),\"checked\":function checked(elem){ // In CSS3, :checked should return both checked and selected elements\n// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\nvar nodeName=elem.nodeName.toLowerCase();return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;},\"selected\":function selected(elem){ // Accessing this property makes selected-by-default\n// options in Safari work properly\nif(elem.parentNode){elem.parentNode.selectedIndex;}return elem.selected === true;}, // Contents\n\"empty\":function empty(elem){ // http://www.w3.org/TR/selectors/#empty-pseudo\n// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n//   but not by others (comment: 8; processing instruction: 7; etc.)\n// nodeType < 6 works because attributes (2) do not appear as children\nfor(elem = elem.firstChild;elem;elem = elem.nextSibling) {if(elem.nodeType < 6){return false;}}return true;},\"parent\":function parent(elem){return !Expr.pseudos[\"empty\"](elem);}, // Element/input types\n\"header\":function header(elem){return rheader.test(elem.nodeName);},\"input\":function input(elem){return rinputs.test(elem.nodeName);},\"button\":function button(elem){var name=elem.nodeName.toLowerCase();return name === \"input\" && elem.type === \"button\" || name === \"button\";},\"text\":function text(elem){var attr;return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n(attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");}, // Position-in-collection\n\"first\":createPositionalPseudo(function(){return [0];}),\"last\":createPositionalPseudo(function(matchIndexes,length){return [length - 1];}),\"eq\":createPositionalPseudo(function(matchIndexes,length,argument){return [argument < 0?argument + length:argument];}),\"even\":createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i < length;i += 2) {matchIndexes.push(i);}return matchIndexes;}),\"odd\":createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i < length;i += 2) {matchIndexes.push(i);}return matchIndexes;}),\"lt\":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument < 0?argument + length:argument;for(;--i >= 0;) {matchIndexes.push(i);}return matchIndexes;}),\"gt\":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument < 0?argument + length:argument;for(;++i < length;) {matchIndexes.push(i);}return matchIndexes;})}};Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\nfor(i in {radio:true,checkbox:true,file:true,password:true,image:true}) {Expr.pseudos[i] = createInputPseudo(i);}for(i in {submit:true,reset:true}) {Expr.pseudos[i] = createButtonPseudo(i);} // Easy API for creating new setFilters\nfunction setFilters(){}setFilters.prototype = Expr.filters = Expr.pseudos;Expr.setFilters = new setFilters();tokenize = Sizzle.tokenize = function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector + \" \"];if(cached){return parseOnly?0:cached.slice(0);}soFar = selector;groups = [];preFilters = Expr.preFilter;while(soFar) { // Comma and first run\nif(!matched || (match = rcomma.exec(soFar))){if(match){ // Don't consume trailing commas as valid\nsoFar = soFar.slice(match[0].length) || soFar;}groups.push(tokens = []);}matched = false; // Combinators\nif(match = rcombinators.exec(soFar)){matched = match.shift();tokens.push({value:matched, // Cast descendant combinators to space\ntype:match[0].replace(rtrim,\" \")});soFar = soFar.slice(matched.length);} // Filters\nfor(type in Expr.filter) {if((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))){matched = match.shift();tokens.push({value:matched,type:type,matches:match});soFar = soFar.slice(matched.length);}}if(!matched){break;}} // Return the length of the invalid excess\n// if we're just parsing\n// Otherwise, throw an error or return tokens\nreturn parseOnly?soFar.length:soFar?Sizzle.error(selector): // Cache the tokens\ntokenCache(selector,groups).slice(0);};function toSelector(tokens){var i=0,len=tokens.length,selector=\"\";for(;i < len;i++) {selector += tokens[i].value;}return selector;}function addCombinator(matcher,combinator,base){var dir=combinator.dir,skip=combinator.next,key=skip || dir,checkNonElements=base && key === \"parentNode\",doneName=done++;return combinator.first? // Check against closest ancestor/preceding element\nfunction(elem,context,xml){while(elem = elem[dir]) {if(elem.nodeType === 1 || checkNonElements){return matcher(elem,context,xml);}}return false;}: // Check against all ancestor/preceding elements\nfunction(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\nif(xml){while(elem = elem[dir]) {if(elem.nodeType === 1 || checkNonElements){if(matcher(elem,context,xml)){return true;}}}}else {while(elem = elem[dir]) {if(elem.nodeType === 1 || checkNonElements){outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n// Defend against cloned attroperties (jQuery gh-1709)\nuniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});if(skip && skip === elem.nodeName.toLowerCase()){elem = elem[dir] || elem;}else if((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName){ // Assign to newCache so results back-propagate to previous elements\nreturn newCache[2] = oldCache[2];}else { // Reuse newcache so results back-propagate to previous elements\nuniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\nif(newCache[2] = matcher(elem,context,xml)){return true;}}}}}return false;};}function elementMatcher(matchers){return matchers.length > 1?function(elem,context,xml){var i=matchers.length;while(i--) {if(!matchers[i](elem,context,xml)){return false;}}return true;}:matchers[0];}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i < len;i++) {Sizzle(selector,contexts[i],results);}return results;}function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map != null;for(;i < len;i++) {if(elem = unmatched[i]){if(!filter || filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i);}}}}return newUnmatched;}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter && !postFilter[expando]){postFilter = setMatcher(postFilter);}if(postFinder && !postFinder[expando]){postFinder = setMatcher(postFinder,postSelector);}return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length, // Get initial elements from seed or context\nelems=seed || multipleContexts(selector || \"*\",context.nodeType?[context]:context,[]), // Prefilter to get matcher input, preserving a map for seed-results synchronization\nmatcherIn=preFilter && (seed || !selector)?condense(elems,preMap,preFilter,context,xml):elems,matcherOut=matcher? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\npostFinder || (seed?preFilter:preexisting || postFilter)? // ...intermediate processing is necessary\n[]: // ...otherwise use results directly\nresults:matcherIn; // Find primary matches\nif(matcher){matcher(matcherIn,matcherOut,context,xml);} // Apply postFilter\nif(postFilter){temp = condense(matcherOut,postMap);postFilter(temp,[],context,xml); // Un-match failing elements by moving them back to matcherIn\ni = temp.length;while(i--) {if(elem = temp[i]){matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);}}}if(seed){if(postFinder || preFilter){if(postFinder){ // Get the final matcherOut by condensing this intermediate into postFinder contexts\ntemp = [];i = matcherOut.length;while(i--) {if(elem = matcherOut[i]){ // Restore matcherIn since elem is not yet a final match\ntemp.push(matcherIn[i] = elem);}}postFinder(null,matcherOut = [],temp,xml);} // Move matched elements from seed to results to keep them synchronized\ni = matcherOut.length;while(i--) {if((elem = matcherOut[i]) && (temp = postFinder?indexOf(seed,elem):preMap[i]) > -1){seed[temp] = !(results[temp] = elem);}}} // Add elements to results, through postFinder if defined\n}else {matcherOut = condense(matcherOut === results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml);}else {push.apply(results,matcherOut);}}});}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative || Expr.relative[\" \"],i=leadingRelative?1:0, // The foundational matcher ensures that elements are reachable from top-level context(s)\nmatchContext=addCombinator(function(elem){return elem === checkContext;},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem) > -1;},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml)); // Avoid hanging onto element (issue #299)\ncheckContext = null;return ret;}];for(;i < len;i++) {if(matcher = Expr.relative[tokens[i].type]){matchers = [addCombinator(elementMatcher(matchers),matcher)];}else {matcher = Expr.filter[tokens[i].type].apply(null,tokens[i].matches); // Return special upon seeing a positional matcher\nif(matcher[expando]){ // Find the next relative operator (if any) for proper handling\nj = ++i;for(;j < len;j++) {if(Expr.relative[tokens[j].type]){break;}}return setMatcher(i > 1 && elementMatcher(matchers),i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\ntokens.slice(0,i - 1).concat({value:tokens[i - 2].type === \" \"?\"*\":\"\"})).replace(rtrim,\"$1\"),matcher,i < j && matcherFromTokens(tokens.slice(i,j)),j < len && matcherFromTokens(tokens = tokens.slice(j)),j < len && toSelector(tokens));}matchers.push(matcher);}}return elementMatcher(matchers);}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length > 0,byElement=elementMatchers.length > 0,superMatcher=function superMatcher(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i=\"0\",unmatched=seed && [],setMatched=[],contextBackup=outermostContext, // We must always have either seed elements or outermost context\nelems=seed || byElement && Expr.find[\"TAG\"](\"*\",outermost), // Use integer dirruns iff this is the outermost matcher\ndirrunsUnique=dirruns += contextBackup == null?1:Math.random() || 0.1,len=elems.length;if(outermost){outermostContext = context === document || context || outermost;} // Add elements passing elementMatchers directly to results\n// Support: IE<9, Safari\n// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\nfor(;i !== len && (elem = elems[i]) != null;i++) {if(byElement && elem){j = 0;if(!context && elem.ownerDocument !== document){setDocument(elem);xml = !documentIsHTML;}while(matcher = elementMatchers[j++]) {if(matcher(elem,context || document,xml)){results.push(elem);break;}}if(outermost){dirruns = dirrunsUnique;}} // Track unmatched elements for set filters\nif(bySet){ // They will have gone through all possible matchers\nif(elem = !matcher && elem){matchedCount--;} // Lengthen the array for every element, matched or not\nif(seed){unmatched.push(elem);}}} // `i` is now the count of elements visited above, and adding it to `matchedCount`\n// makes the latter nonnegative.\nmatchedCount += i; // Apply set filters to unmatched elements\n// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n// no element matchers and no seed.\n// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n// numerically zero.\nif(bySet && i !== matchedCount){j = 0;while(matcher = setMatchers[j++]) {matcher(unmatched,setMatched,context,xml);}if(seed){ // Reintegrate element matches to eliminate the need for sorting\nif(matchedCount > 0){while(i--) {if(!(unmatched[i] || setMatched[i])){setMatched[i] = pop.call(results);}}} // Discard index placeholder values to get only actual matches\nsetMatched = condense(setMatched);} // Add matches to results\npush.apply(results,setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\nif(outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1){Sizzle.uniqueSort(results);}} // Override manipulation of globals by nested matchers\nif(outermost){dirruns = dirrunsUnique;outermostContext = contextBackup;}return unmatched;};return bySet?markFunction(superMatcher):superMatcher;}compile = Sizzle.compile = function(selector,match /* Internal Use Only */){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector + \" \"];if(!cached){ // Generate a function of recursive functions that can be used to check each element\nif(!match){match = tokenize(selector);}i = match.length;while(i--) {cached = matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached);}else {elementMatchers.push(cached);}} // Cache the compiled function\ncached = compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers)); // Save selector and tokenization\ncached.selector = selector;}return cached;}; /**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */select = Sizzle.select = function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector === \"function\" && selector,match=!seed && tokenize(selector = compiled.selector || selector);results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n// (the latter of which guarantees us context)\nif(match.length === 1){ // Reduce context if the leading compound selector is an ID\ntokens = match[0] = match[0].slice(0);if(tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]){context = (Expr.find[\"ID\"](token.matches[0].replace(runescape,funescape),context) || [])[0];if(!context){return results; // Precompiled matchers will still verify ancestry, so step up a level\n}else if(compiled){context = context.parentNode;}selector = selector.slice(tokens.shift().value.length);} // Fetch a seed set for right-to-left matching\ni = matchExpr[\"needsContext\"].test(selector)?0:tokens.length;while(i--) {token = tokens[i]; // Abort if we hit a combinator\nif(Expr.relative[type = token.type]){break;}if(find = Expr.find[type]){ // Search, expanding context for leading sibling combinators\nif(seed = find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)){ // If seed is empty or no tokens remain, we can return early\ntokens.splice(i,1);selector = seed.length && toSelector(tokens);if(!selector){push.apply(results,seed);return results;}break;}}}} // Compile and execute a filtering function if one is not provided\n// Provide `match` to avoid retokenization if we modified the selector above\n(compiled || compile(selector,match))(seed,context,!documentIsHTML,results,!context || rsibling.test(selector) && testContext(context.parentNode) || context);return results;}; // One-time assignments\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate; // Initialize against the default document\nsetDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function(el){ // Should return 1, but returns 4 (following)\nreturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;}); // Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif(!assert(function(el){el.innerHTML = \"<a href='#'></a>\";return el.firstChild.getAttribute(\"href\") === \"#\";})){addHandle(\"type|href|height|width\",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase() === \"type\"?1:2);}});} // Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif(!support.attributes || !assert(function(el){el.innerHTML = \"<input/>\";el.firstChild.setAttribute(\"value\",\"\");return el.firstChild.getAttribute(\"value\") === \"\";})){addHandle(\"value\",function(elem,name,isXML){if(!isXML && elem.nodeName.toLowerCase() === \"input\"){return elem.defaultValue;}});} // Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif(!assert(function(el){return el.getAttribute(\"disabled\") == null;})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name] === true?name.toLowerCase():(val = elem.getAttributeNode(name)) && val.specified?val.value:null;}});}return Sizzle;})(window);jQuery.find = Sizzle;jQuery.expr = Sizzle.selectors; // Deprecated\njQuery.expr[\":\"] = jQuery.expr.pseudos;jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;jQuery.text = Sizzle.getText;jQuery.isXMLDoc = Sizzle.isXML;jQuery.contains = Sizzle.contains;jQuery.escapeSelector = Sizzle.escape;var dir=function dir(elem,_dir,until){var matched=[],truncate=until !== undefined;while((elem = elem[_dir]) && elem.nodeType !== 9) {if(elem.nodeType === 1){if(truncate && jQuery(elem).is(until)){break;}matched.push(elem);}}return matched;};var _siblings=function _siblings(n,elem){var matched=[];for(;n;n = n.nextSibling) {if(n.nodeType === 1 && n !== elem){matched.push(n);}}return matched;};var rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();};var rsingleTag=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;var risSimple=/^.[^:#\\[\\.,]*$/; // Implement the identical functionality for filter and not\nfunction winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return !!qualifier.call(elem,i,elem) !== not;});} // Single element\nif(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem === qualifier !== not;});} // Arraylike of elements (jQuery, arguments, Array)\nif(typeof qualifier !== \"string\"){return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem) > -1 !== not;});} // Simple selector that can be filtered directly, removing non-Elements\nif(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not);} // Complex selector, compare the two sets, removing non-Elements\nqualifier = jQuery.filter(qualifier,elements);return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem) > -1 !== not && elem.nodeType === 1;});}jQuery.filter = function(expr,elems,not){var elem=elems[0];if(not){expr = \":not(\" + expr + \")\";}if(elems.length === 1 && elem.nodeType === 1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[];}return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType === 1;}));};jQuery.fn.extend({find:function find(selector){var i,ret,len=this.length,self=this;if(typeof selector !== \"string\"){return this.pushStack(jQuery(selector).filter(function(){for(i = 0;i < len;i++) {if(jQuery.contains(self[i],this)){return true;}}}));}ret = this.pushStack([]);for(i = 0;i < len;i++) {jQuery.find(selector,self[i],ret);}return len > 1?jQuery.uniqueSort(ret):ret;},filter:function filter(selector){return this.pushStack(winnow(this,selector || [],false));},not:function not(selector){return this.pushStack(winnow(this,selector || [],true));},is:function is(selector){return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\ntypeof selector === \"string\" && rneedsContext.test(selector)?jQuery(selector):selector || [],false).length;}}); // Initialize a jQuery object\n// A central reference to the root jQuery(document)\nvar rootjQuery, // A simple way to check for HTML strings\n// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n// Strict HTML recognition (#11290: must start with <)\n// Shortcut simple #id case for speed\nrquickExpr=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,init=jQuery.fn.init = function(selector,context,root){var match,elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\nif(!selector){return this;} // Method init() accepts an alternate rootjQuery\n// so migrate can support jQuery.sub (gh-2101)\nroot = root || rootjQuery; // Handle HTML strings\nif(typeof selector === \"string\"){if(selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3){ // Assume that strings that start and end with <> are HTML and skip the regex check\nmatch = [null,selector,null];}else {match = rquickExpr.exec(selector);} // Match html or make sure no context is specified for #id\nif(match && (match[1] || !context)){ // HANDLE: $(html) -> $(array)\nif(match[1]){context = context instanceof jQuery?context[0]:context; // Option to run scripts is true for back-compat\n// Intentionally let the error be thrown if parseHTML is not present\njQuery.merge(this,jQuery.parseHTML(match[1],context && context.nodeType?context.ownerDocument || context:document,true)); // HANDLE: $(html, props)\nif(rsingleTag.test(match[1]) && jQuery.isPlainObject(context)){for(match in context) { // Properties of context are called as methods if possible\nif(jQuery.isFunction(this[match])){this[match](context[match]); // ...and otherwise set as attributes\n}else {this.attr(match,context[match]);}}}return this; // HANDLE: $(#id)\n}else {elem = document.getElementById(match[2]);if(elem){ // Inject the element directly into the jQuery object\nthis[0] = elem;this.length = 1;}return this;} // HANDLE: $(expr, $(...))\n}else if(!context || context.jquery){return (context || root).find(selector); // HANDLE: $(expr, context)\n// (which is just equivalent to: $(context).find(expr)\n}else {return this.constructor(context).find(selector);} // HANDLE: $(DOMElement)\n}else if(selector.nodeType){this[0] = selector;this.length = 1;return this; // HANDLE: $(function)\n// Shortcut for document ready\n}else if(jQuery.isFunction(selector)){return root.ready !== undefined?root.ready(selector): // Execute immediately if ready is not present\nselector(jQuery);}return jQuery.makeArray(selector,this);}; // Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn; // Initialize central reference\nrootjQuery = jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/, // Methods guaranteed to produce a unique set when starting from a unique set\nguaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function has(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i < l;i++) {if(jQuery.contains(this,targets[i])){return true;}}});},closest:function closest(selectors,context){var cur,i=0,l=this.length,matched=[],targets=typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\nif(!rneedsContext.test(selectors)){for(;i < l;i++) {for(cur = this[i];cur && cur !== context;cur = cur.parentNode) { // Always skip document fragments\nif(cur.nodeType < 11 && (targets?targets.index(cur) > -1: // Don't pass non-elements to Sizzle\ncur.nodeType === 1 && jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break;}}}}return this.pushStack(matched.length > 1?jQuery.uniqueSort(matched):matched);}, // Determine the position of an element within the set\nindex:function index(elem){ // No argument, return index in parent\nif(!elem){return this[0] && this[0].parentNode?this.first().prevAll().length:-1;} // Index in selector\nif(typeof elem === \"string\"){return indexOf.call(jQuery(elem),this[0]);} // Locate the position of the desired element\nreturn indexOf.call(this, // If it receives a jQuery object, the first element is used\nelem.jquery?elem[0]:elem);},add:function add(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))));},addBack:function addBack(selector){return this.add(selector == null?this.prevObject:this.prevObject.filter(selector));}});function sibling(cur,dir){while((cur = cur[dir]) && cur.nodeType !== 1) {}return cur;}jQuery.each({parent:function parent(elem){var parent=elem.parentNode;return parent && parent.nodeType !== 11?parent:null;},parents:function parents(elem){return dir(elem,\"parentNode\");},parentsUntil:function parentsUntil(elem,i,until){return dir(elem,\"parentNode\",until);},next:function next(elem){return sibling(elem,\"nextSibling\");},prev:function prev(elem){return sibling(elem,\"previousSibling\");},nextAll:function nextAll(elem){return dir(elem,\"nextSibling\");},prevAll:function prevAll(elem){return dir(elem,\"previousSibling\");},nextUntil:function nextUntil(elem,i,until){return dir(elem,\"nextSibling\",until);},prevUntil:function prevUntil(elem,i,until){return dir(elem,\"previousSibling\",until);},siblings:function siblings(elem){return _siblings((elem.parentNode || {}).firstChild,elem);},children:function children(elem){return _siblings(elem.firstChild);},contents:function contents(elem){if(nodeName(elem,\"iframe\")){return elem.contentDocument;} // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n// Treat the template element as a regular one in browsers that\n// don't support it.\nif(nodeName(elem,\"template\")){elem = elem.content || elem;}return jQuery.merge([],elem.childNodes);}},function(name,fn){jQuery.fn[name] = function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5) !== \"Until\"){selector = until;}if(selector && typeof selector === \"string\"){matched = jQuery.filter(selector,matched);}if(this.length > 1){ // Remove duplicates\nif(!guaranteedUnique[name]){jQuery.uniqueSort(matched);} // Reverse order for parents* and prev-derivatives\nif(rparentsprev.test(name)){matched.reverse();}}return this.pushStack(matched);};});var rnothtmlwhite=/[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\nfunction createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite) || [],function(_,flag){object[flag] = true;});return object;} /*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */jQuery.Callbacks = function(options){ // Convert options from String-formatted to Object-formatted if needed\n// (we check in cache first)\noptions = typeof options === \"string\"?createOptions(options):jQuery.extend({},options);var  // Flag to know if list is currently firing\nfiring, // Last fire value for non-forgettable lists\nmemory, // Flag to know if list was already fired\n_fired, // Flag to prevent firing\n_locked, // Actual callback list\nlist=[], // Queue of execution data for repeatable lists\nqueue=[], // Index of currently firing callback (modified by add/remove as needed)\nfiringIndex=-1, // Fire callbacks\nfire=function fire(){ // Enforce single-firing\n_locked = _locked || options.once; // Execute callbacks for all pending executions,\n// respecting firingIndex overrides and runtime changes\n_fired = firing = true;for(;queue.length;firingIndex = -1) {memory = queue.shift();while(++firingIndex < list.length) { // Run callback and check for early termination\nif(list[firingIndex].apply(memory[0],memory[1]) === false && options.stopOnFalse){ // Jump to end and forget the data so .add doesn't re-fire\nfiringIndex = list.length;memory = false;}}} // Forget the data if we're done with it\nif(!options.memory){memory = false;}firing = false; // Clean up if we're done firing for good\nif(_locked){ // Keep an empty list if we have data for future add calls\nif(memory){list = []; // Otherwise, this object is spent\n}else {list = \"\";}}}, // Actual Callbacks object\nself={ // Add a callback or a collection of callbacks to the list\nadd:function add(){if(list){ // If we have memory from a past run, we should fire after adding\nif(memory && !firing){firingIndex = list.length - 1;queue.push(memory);}(function add(args){jQuery.each(args,function(_,arg){if(jQuery.isFunction(arg)){if(!options.unique || !self.has(arg)){list.push(arg);}}else if(arg && arg.length && jQuery.type(arg) !== \"string\"){ // Inspect recursively\nadd(arg);}});})(arguments);if(memory && !firing){fire();}}return this;}, // Remove a callback from the list\nremove:function remove(){jQuery.each(arguments,function(_,arg){var index;while((index = jQuery.inArray(arg,list,index)) > -1) {list.splice(index,1); // Handle firing indexes\nif(index <= firingIndex){firingIndex--;}}});return this;}, // Check if a given callback is in the list.\n// If no argument is given, return whether or not list has callbacks attached.\nhas:function has(fn){return fn?jQuery.inArray(fn,list) > -1:list.length > 0;}, // Remove all callbacks from the list\nempty:function empty(){if(list){list = [];}return this;}, // Disable .fire and .add\n// Abort any current/pending executions\n// Clear all callbacks and values\ndisable:function disable(){_locked = queue = [];list = memory = \"\";return this;},disabled:function disabled(){return !list;}, // Disable .fire\n// Also disable .add unless we have memory (since it would have no effect)\n// Abort any pending executions\nlock:function lock(){_locked = queue = [];if(!memory && !firing){list = memory = \"\";}return this;},locked:function locked(){return !!_locked;}, // Call all callbacks with the given context and arguments\nfireWith:function fireWith(context,args){if(!_locked){args = args || [];args = [context,args.slice?args.slice():args];queue.push(args);if(!firing){fire();}}return this;}, // Call all the callbacks with the given arguments\nfire:function fire(){self.fireWith(this,arguments);return this;}, // To know if the callbacks have already been called at least once\nfired:function fired(){return !!_fired;}};return self;};function Identity(v){return v;}function Thrower(ex){throw ex;}function adoptValue(value,resolve,reject,noValue){var method;try{ // Check for promise aspect first to privilege synchronous behavior\nif(value && jQuery.isFunction(method = value.promise)){method.call(value).done(resolve).fail(reject); // Other thenables\n}else if(value && jQuery.isFunction(method = value.then)){method.call(value,resolve,reject); // Other non-thenables\n}else { // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n// * false: [ value ].slice( 0 ) => resolve( value )\n// * true: [ value ].slice( 1 ) => resolve()\nresolve.apply(undefined,[value].slice(noValue));} // For Promises/A+, convert exceptions into rejections\n// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n// Deferred#then to conditionally suppress rejection.\n}catch(value) { // Support: Android 4.0 only\n// Strict mode functions invoked without .call/.apply get global-object context\nreject.apply(undefined,[value]);}}jQuery.extend({Deferred:function Deferred(func){var tuples=[ // action, add listener, callbacks,\n// ... .then handlers, argument index, [final state]\n[\"notify\",\"progress\",jQuery.Callbacks(\"memory\"),jQuery.Callbacks(\"memory\"),2],[\"resolve\",\"done\",jQuery.Callbacks(\"once memory\"),jQuery.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",jQuery.Callbacks(\"once memory\"),jQuery.Callbacks(\"once memory\"),1,\"rejected\"]],_state=\"pending\",_promise={state:function state(){return _state;},always:function always(){deferred.done(arguments).fail(arguments);return this;},\"catch\":function _catch(fn){return _promise.then(null,fn);}, // Keep pipe for back-compat\npipe:function pipe() /* fnDone, fnFail, fnProgress */{var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){ // Map tuples (progress, done, fail) to arguments (done, fail, progress)\nvar fn=jQuery.isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n// deferred.done(function() { bind to newDefer or newDefer.resolve })\n// deferred.fail(function() { bind to newDefer or newDefer.reject })\ndeferred[tuple[1]](function(){var returned=fn && fn.apply(this,arguments);if(returned && jQuery.isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);}else {newDefer[tuple[0] + \"With\"](this,fn?[returned]:arguments);}});});fns = null;}).promise();},then:function then(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function mightThrow(){var returned,then; // Support: Promises/A+ section 2.3.3.3.3\n// https://promisesaplus.com/#point-59\n// Ignore double-resolution attempts\nif(depth < maxDepth){return;}returned = handler.apply(that,args); // Support: Promises/A+ section 2.3.1\n// https://promisesaplus.com/#point-48\nif(returned === deferred.promise()){throw new TypeError(\"Thenable self-resolution\");} // Support: Promises/A+ sections 2.3.3.1, 3.5\n// https://promisesaplus.com/#point-54\n// https://promisesaplus.com/#point-75\n// Retrieve `then` only once\nthen = returned && ( // Support: Promises/A+ section 2.3.4\n// https://promisesaplus.com/#point-64\n// Only check objects and functions for thenability\ntypeof returned === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\nif(jQuery.isFunction(then)){ // Special processors (notify) just wait for resolution\nif(special){then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special)); // Normal processors (resolve) also hook into progress\n}else { // ...and disregard older resolution values\nmaxDepth++;then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special),resolve(maxDepth,deferred,Identity,deferred.notifyWith));} // Handle all other returned values\n}else { // Only substitute handlers pass on context\n// and multiple values (non-spec behavior)\nif(handler !== Identity){that = undefined;args = [returned];} // Process the value(s)\n// Default process is resolve\n(special || deferred.resolveWith)(that,args);}}, // Only normal processors (resolve) catch and reject exceptions\nprocess=special?mightThrow:function(){try{mightThrow();}catch(e) {if(jQuery.Deferred.exceptionHook){jQuery.Deferred.exceptionHook(e,process.stackTrace);} // Support: Promises/A+ section 2.3.3.3.4.1\n// https://promisesaplus.com/#point-61\n// Ignore post-resolution exceptions\nif(depth + 1 >= maxDepth){ // Only substitute handlers pass on context\n// and multiple values (non-spec behavior)\nif(handler !== Thrower){that = undefined;args = [e];}deferred.rejectWith(that,args);}}}; // Support: Promises/A+ section 2.3.3.3.1\n// https://promisesaplus.com/#point-57\n// Re-resolve promises immediately to dodge false rejection from\n// subsequent errors\nif(depth){process();}else { // Call an optional hook to record the stack, in case of exception\n// since it's otherwise lost when execution goes async\nif(jQuery.Deferred.getStackHook){process.stackTrace = jQuery.Deferred.getStackHook();}window.setTimeout(process);}};}return jQuery.Deferred(function(newDefer){ // progress_handlers.add( ... )\ntuples[0][3].add(resolve(0,newDefer,jQuery.isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith)); // fulfilled_handlers.add( ... )\ntuples[1][3].add(resolve(0,newDefer,jQuery.isFunction(onFulfilled)?onFulfilled:Identity)); // rejected_handlers.add( ... )\ntuples[2][3].add(resolve(0,newDefer,jQuery.isFunction(onRejected)?onRejected:Thrower));}).promise();}, // Get a promise for this deferred\n// If obj is provided, the promise aspect is added to the object\npromise:function promise(obj){return obj != null?jQuery.extend(obj,_promise):_promise;}},deferred={}; // Add list-specific methods\njQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5]; // promise.progress = list.add\n// promise.done = list.add\n// promise.fail = list.add\n_promise[tuple[1]] = list.add; // Handle state\nif(stateString){list.add(function(){ // state = \"resolved\" (i.e., fulfilled)\n// state = \"rejected\"\n_state = stateString;}, // rejected_callbacks.disable\n// fulfilled_callbacks.disable\ntuples[3 - i][2].disable, // progress_callbacks.lock\ntuples[0][2].lock);} // progress_handlers.fire\n// fulfilled_handlers.fire\n// rejected_handlers.fire\nlist.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n// deferred.resolve = function() { deferred.resolveWith(...) }\n// deferred.reject = function() { deferred.rejectWith(...) }\ndeferred[tuple[0]] = function(){deferred[tuple[0] + \"With\"](this === deferred?undefined:this,arguments);return this;}; // deferred.notifyWith = list.fireWith\n// deferred.resolveWith = list.fireWith\n// deferred.rejectWith = list.fireWith\ndeferred[tuple[0] + \"With\"] = list.fireWith;}); // Make the deferred a promise\n_promise.promise(deferred); // Call given func if any\nif(func){func.call(deferred,deferred);} // All done!\nreturn deferred;}, // Deferred helper\nwhen:function when(singleValue){var  // count of uncompleted subordinates\nremaining=arguments.length, // count of unprocessed arguments\ni=remaining, // subordinate fulfillment data\nresolveContexts=Array(i),resolveValues=_slice.call(arguments), // the master Deferred\nmaster=jQuery.Deferred(), // subordinate callback factory\nupdateFunc=function updateFunc(i){return function(value){resolveContexts[i] = this;resolveValues[i] = arguments.length > 1?_slice.call(arguments):value;if(! --remaining){master.resolveWith(resolveContexts,resolveValues);}};}; // Single- and empty arguments are adopted like Promise.resolve\nif(remaining <= 1){adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject,!remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\nif(master.state() === \"pending\" || jQuery.isFunction(resolveValues[i] && resolveValues[i].then)){return master.then();}} // Multiple arguments are aggregated like Promise.all array elements\nwhile(i--) {adoptValue(resolveValues[i],updateFunc(i),master.reject);}return master.promise();}}); // These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook = function(error,stack){ // Support: IE 8 - 9 only\n// Console exists when dev tools are open, which can happen at any time\nif(window.console && window.console.warn && error && rerrorNames.test(error.name)){window.console.warn(\"jQuery.Deferred exception: \" + error.message,error.stack,stack);}};jQuery.readyException = function(error){window.setTimeout(function(){throw error;});}; // The deferred used on DOM ready\nvar readyList=jQuery.Deferred();jQuery.fn.ready = function(fn){readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n// happens at the time of error handling instead of callback\n// registration.\n[\"catch\"](function(error){jQuery.readyException(error);});return this;};jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs.\nisReady:false, // A counter to track how many items to wait for before\n// the ready event fires. See #6781\nreadyWait:1, // Handle when the DOM is ready\nready:function ready(wait){ // Abort if there are pending holds or we're already ready\nif(wait === true?--jQuery.readyWait:jQuery.isReady){return;} // Remember that the DOM is ready\njQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\nif(wait !== true && --jQuery.readyWait > 0){return;} // If there are functions bound, to execute\nreadyList.resolveWith(document,[jQuery]);}});jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\nfunction completed(){document.removeEventListener(\"DOMContentLoaded\",completed);window.removeEventListener(\"load\",completed);jQuery.ready();} // Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif(document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll){ // Handle it asynchronously to allow scripts the opportunity to delay ready\nwindow.setTimeout(jQuery.ready);}else { // Use the handy event callback\ndocument.addEventListener(\"DOMContentLoaded\",completed); // A fallback to window.onload, that will always work\nwindow.addEventListener(\"load\",completed);} // Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access=function access(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key == null; // Sets many values\nif(jQuery.type(key) === \"object\"){chainable = true;for(i in key) {access(elems,fn,i,key[i],true,emptyGet,raw);} // Sets one value\n}else if(value !== undefined){chainable = true;if(!jQuery.isFunction(value)){raw = true;}if(bulk){ // Bulk operations run against the entire set\nif(raw){fn.call(elems,value);fn = null; // ...except when executing function values\n}else {bulk = fn;fn = function(elem,key,value){return bulk.call(jQuery(elem),value);};}}if(fn){for(;i < len;i++) {fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)));}}}if(chainable){return elems;} // Gets\nif(bulk){return fn.call(elems);}return len?fn(elems[0],key):emptyGet;};var acceptData=function acceptData(owner){ // Accepts only:\n//  - Node\n//    - Node.ELEMENT_NODE\n//    - Node.DOCUMENT_NODE\n//  - Object\n//    - Any\nreturn owner.nodeType === 1 || owner.nodeType === 9 || ! +owner.nodeType;};function Data(){this.expando = jQuery.expando + Data.uid++;}Data.uid = 1;Data.prototype = {cache:function cache(owner){ // Check if the owner object already has a cache\nvar value=owner[this.expando]; // If not, create one\nif(!value){value = {}; // We can accept data for non-element nodes in modern browsers,\n// but we should not, see #8335.\n// Always return an empty object.\nif(acceptData(owner)){ // If it is a node unlikely to be stringify-ed or looped over\n// use plain assignment\nif(owner.nodeType){owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n// configurable must be true to allow the property to be\n// deleted when data is removed\n}else {Object.defineProperty(owner,this.expando,{value:value,configurable:true});}}}return value;},set:function set(owner,data,value){var prop,cache=this.cache(owner); // Handle: [ owner, key, value ] args\n// Always use camelCase key (gh-2257)\nif(typeof data === \"string\"){cache[jQuery.camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n}else { // Copy the properties one-by-one to the cache object\nfor(prop in data) {cache[jQuery.camelCase(prop)] = data[prop];}}return cache;},get:function get(owner,key){return key === undefined?this.cache(owner): // Always use camelCase key (gh-2257)\nowner[this.expando] && owner[this.expando][jQuery.camelCase(key)];},access:function access(owner,key,value){ // In cases where either:\n//\n//   1. No key was specified\n//   2. A string key was specified, but no value provided\n//\n// Take the \"read\" path and allow the get method to determine\n// which value to return, respectively either:\n//\n//   1. The entire cache object\n//   2. The data stored at the key\n//\nif(key === undefined || key && typeof key === \"string\" && value === undefined){return this.get(owner,key);} // When the key is not a string, or both a key and value\n// are specified, set or extend (existing objects) with either:\n//\n//   1. An object of properties\n//   2. A key and value\n//\nthis.set(owner,key,value); // Since the \"set\" path can have two possible entry points\n// return the expected data based on which path was taken[*]\nreturn value !== undefined?value:key;},remove:function remove(owner,key){var i,cache=owner[this.expando];if(cache === undefined){return;}if(key !== undefined){ // Support array or space separated string of keys\nif(Array.isArray(key)){ // If key is an array of keys...\n// We always set camelCase keys, so remove that.\nkey = key.map(jQuery.camelCase);}else {key = jQuery.camelCase(key); // If a key with the spaces exists, use it.\n// Otherwise, create an array by matching non-whitespace\nkey = key in cache?[key]:key.match(rnothtmlwhite) || [];}i = key.length;while(i--) {delete cache[key[i]];}} // Remove the expando if there's no more data\nif(key === undefined || jQuery.isEmptyObject(cache)){ // Support: Chrome <=35 - 45\n// Webkit & Blink performance suffers when deleting properties\n// from DOM nodes, so set to undefined instead\n// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\nif(owner.nodeType){owner[this.expando] = undefined;}else {delete owner[this.expando];}}},hasData:function hasData(owner){var cache=owner[this.expando];return cache !== undefined && !jQuery.isEmptyObject(cache);}};var dataPriv=new Data();var dataUser=new Data(); //\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\nvar rbrace=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,rmultiDash=/[A-Z]/g;function getData(data){if(data === \"true\"){return true;}if(data === \"false\"){return false;}if(data === \"null\"){return null;} // Only convert to a number if it doesn't change the string\nif(data === +data + \"\"){return +data;}if(rbrace.test(data)){return JSON.parse(data);}return data;}function dataAttr(elem,key,data){var name; // If nothing was found internally, try to fetch any\n// data from the HTML5 data-* attribute\nif(data === undefined && elem.nodeType === 1){name = \"data-\" + key.replace(rmultiDash,\"-$&\").toLowerCase();data = elem.getAttribute(name);if(typeof data === \"string\"){try{data = getData(data);}catch(e) {} // Make sure we set the data so it isn't changed later\ndataUser.set(elem,key,data);}else {data = undefined;}}return data;}jQuery.extend({hasData:function hasData(elem){return dataUser.hasData(elem) || dataPriv.hasData(elem);},data:function data(elem,name,_data){return dataUser.access(elem,name,_data);},removeData:function removeData(elem,name){dataUser.remove(elem,name);}, // TODO: Now that all calls to _data and _removeData have been replaced\n// with direct calls to dataPriv methods, these can be deprecated.\n_data:function _data(elem,name,data){return dataPriv.access(elem,name,data);},_removeData:function _removeData(elem,name){dataPriv.remove(elem,name);}});jQuery.fn.extend({data:function data(key,value){var i,name,data,elem=this[0],attrs=elem && elem.attributes; // Gets all values\nif(key === undefined){if(this.length){data = dataUser.get(elem);if(elem.nodeType === 1 && !dataPriv.get(elem,\"hasDataAttrs\")){i = attrs.length;while(i--) { // Support: IE 11 only\n// The attrs elements can be null (#14894)\nif(attrs[i]){name = attrs[i].name;if(name.indexOf(\"data-\") === 0){name = jQuery.camelCase(name.slice(5));dataAttr(elem,name,data[name]);}}}dataPriv.set(elem,\"hasDataAttrs\",true);}}return data;} // Sets multiple values\nif(typeof key === \"object\"){return this.each(function(){dataUser.set(this,key);});}return access(this,function(value){var data; // The calling jQuery object (element matches) is not empty\n// (and therefore has an element appears at this[ 0 ]) and the\n// `value` parameter was not undefined. An empty jQuery object\n// will result in `undefined` for elem = this[ 0 ] which will\n// throw an exception if an attempt to read a data cache is made.\nif(elem && value === undefined){ // Attempt to get data from the cache\n// The key will always be camelCased in Data\ndata = dataUser.get(elem,key);if(data !== undefined){return data;} // Attempt to \"discover\" the data in\n// HTML5 custom data-* attrs\ndata = dataAttr(elem,key);if(data !== undefined){return data;} // We tried really hard, but the data doesn't exist.\nreturn;} // Set the data...\nthis.each(function(){ // We always store the camelCased key\ndataUser.set(this,key,value);});},null,value,arguments.length > 1,null,true);},removeData:function removeData(key){return this.each(function(){dataUser.remove(this,key);});}});jQuery.extend({queue:function queue(elem,type,data){var queue;if(elem){type = (type || \"fx\") + \"queue\";queue = dataPriv.get(elem,type); // Speed up dequeue by getting out quickly if this is just a lookup\nif(data){if(!queue || Array.isArray(data)){queue = dataPriv.access(elem,type,jQuery.makeArray(data));}else {queue.push(data);}}return queue || [];}},dequeue:function dequeue(elem,type){type = type || \"fx\";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function next(){jQuery.dequeue(elem,type);}; // If the fx queue is dequeued, always remove the progress sentinel\nif(fn === \"inprogress\"){fn = queue.shift();startLength--;}if(fn){ // Add a progress sentinel to prevent the fx queue from being\n// automatically dequeued\nif(type === \"fx\"){queue.unshift(\"inprogress\");} // Clear up the last queue stop function\ndelete hooks.stop;fn.call(elem,next,hooks);}if(!startLength && hooks){hooks.empty.fire();}}, // Not public - generate a queueHooks object, or return the current one\n_queueHooks:function _queueHooks(elem,type){var key=type + \"queueHooks\";return dataPriv.get(elem,key) || dataPriv.access(elem,key,{empty:jQuery.Callbacks(\"once memory\").add(function(){dataPriv.remove(elem,[type + \"queue\",key]);})});}});jQuery.fn.extend({queue:function queue(type,data){var setter=2;if(typeof type !== \"string\"){data = type;type = \"fx\";setter--;}if(arguments.length < setter){return jQuery.queue(this[0],type);}return data === undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data); // Ensure a hooks for this queue\njQuery._queueHooks(this,type);if(type === \"fx\" && queue[0] !== \"inprogress\"){jQuery.dequeue(this,type);}});},dequeue:function dequeue(type){return this.each(function(){jQuery.dequeue(this,type);});},clearQueue:function clearQueue(type){return this.queue(type || \"fx\",[]);}, // Get a promise resolved when queues of a certain type\n// are emptied (fx is the type by default)\npromise:function promise(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function resolve(){if(! --count){defer.resolveWith(elements,[elements]);}};if(typeof type !== \"string\"){obj = type;type = undefined;}type = type || \"fx\";while(i--) {tmp = dataPriv.get(elements[i],type + \"queueHooks\");if(tmp && tmp.empty){count++;tmp.empty.add(resolve);}}resolve();return defer.promise(obj);}});var pnum=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;var rcssNum=new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\",\"i\");var cssExpand=[\"Top\",\"Right\",\"Bottom\",\"Left\"];var isHiddenWithinTree=function isHiddenWithinTree(elem,el){ // isHiddenWithinTree might be called from jQuery#filter function;\n// in that case, element will be second argument\nelem = el || elem; // Inline style trumps all\nreturn elem.style.display === \"none\" || elem.style.display === \"\" &&  // Otherwise, check computed style\n// Support: Firefox <=43 - 45\n// Disconnected elements can have computed display: none, so first confirm that elem is\n// in the document.\njQuery.contains(elem.ownerDocument,elem) && jQuery.css(elem,\"display\") === \"none\";};var swap=function swap(elem,options,callback,args){var ret,name,old={}; // Remember the old values, and insert the new ones\nfor(name in options) {old[name] = elem.style[name];elem.style[name] = options[name];}ret = callback.apply(elem,args || []); // Revert the old values\nfor(name in options) {elem.style[name] = old[name];}return ret;};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale=1,maxIterations=20,currentValue=tween?function(){return tween.cur();}:function(){return jQuery.css(elem,prop,\"\");},initial=currentValue(),unit=valueParts && valueParts[3] || (jQuery.cssNumber[prop]?\"\":\"px\"), // Starting value computation is required for potential unit mismatches\ninitialInUnit=(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit && initialInUnit[3] !== unit){ // Trust units reported by jQuery.css\nunit = unit || initialInUnit[3]; // Make sure we update the tween properties later on\nvalueParts = valueParts || []; // Iteratively approximate from a nonzero starting point\ninitialInUnit = +initial || 1;do { // If previous iteration zeroed out, double until we get *something*.\n// Use string for doubling so we don't accidentally see scale as unchanged below\nscale = scale || \".5\"; // Adjust and apply\ninitialInUnit = initialInUnit / scale;jQuery.style(elem,prop,initialInUnit + unit); // Update scale, tolerating zero or NaN from tween.cur()\n// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n}while(scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations);}if(valueParts){initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\nadjusted = valueParts[1]?initialInUnit + (valueParts[1] + 1) * valueParts[2]:+valueParts[2];if(tween){tween.unit = unit;tween.start = initialInUnit;tween.end = adjusted;}}return adjusted;}var defaultDisplayMap={};function getDefaultDisplay(elem){var temp,doc=elem.ownerDocument,nodeName=elem.nodeName,display=defaultDisplayMap[nodeName];if(display){return display;}temp = doc.body.appendChild(doc.createElement(nodeName));display = jQuery.css(temp,\"display\");temp.parentNode.removeChild(temp);if(display === \"none\"){display = \"block\";}defaultDisplayMap[nodeName] = display;return display;}function showHide(elements,show){var display,elem,values=[],index=0,length=elements.length; // Determine new display value for elements that need to change\nfor(;index < length;index++) {elem = elements[index];if(!elem.style){continue;}display = elem.style.display;if(show){ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n// check is required in this first loop unless we have a nonempty display value (either\n// inline or about-to-be-restored)\nif(display === \"none\"){values[index] = dataPriv.get(elem,\"display\") || null;if(!values[index]){elem.style.display = \"\";}}if(elem.style.display === \"\" && isHiddenWithinTree(elem)){values[index] = getDefaultDisplay(elem);}}else {if(display !== \"none\"){values[index] = \"none\"; // Remember what we're overwriting\ndataPriv.set(elem,\"display\",display);}}} // Set the display of the elements in a second loop to avoid constant reflow\nfor(index = 0;index < length;index++) {if(values[index] != null){elements[index].style.display = values[index];}}return elements;}jQuery.fn.extend({show:function show(){return showHide(this,true);},hide:function hide(){return showHide(this);},toggle:function toggle(state){if(typeof state === \"boolean\"){return state?this.show():this.hide();}return this.each(function(){if(isHiddenWithinTree(this)){jQuery(this).show();}else {jQuery(this).hide();}});}});var rcheckableType=/^(?:checkbox|radio)$/i;var rtagName=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i;var rscriptType=/^$|\\/(?:java|ecma)script/i; // We have to close these tags to support XHTML (#13200)\nvar wrapMap={ // Support: IE <=9 only\noption:[1,\"<select multiple='multiple'>\",\"</select>\"], // XHTML parsers do not magically insert elements in the\n// same way that tag soup parsers do. So we cannot shorten\n// this by omitting <tbody> or other required elements.\nthead:[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,\"\",\"\"]}; // Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;wrapMap.th = wrapMap.td;function getAll(context,tag){ // Support: IE <=9 - 11 only\n// Use typeof to avoid zero-argument method invocation on host objects (#15151)\nvar ret;if(typeof context.getElementsByTagName !== \"undefined\"){ret = context.getElementsByTagName(tag || \"*\");}else if(typeof context.querySelectorAll !== \"undefined\"){ret = context.querySelectorAll(tag || \"*\");}else {ret = [];}if(tag === undefined || tag && nodeName(context,tag)){return jQuery.merge([context],ret);}return ret;} // Mark scripts as having already been evaluated\nfunction setGlobalEval(elems,refElements){var i=0,l=elems.length;for(;i < l;i++) {dataPriv.set(elems[i],\"globalEval\",!refElements || dataPriv.get(refElements[i],\"globalEval\"));}}var rhtml=/<|&#?\\w+;/;function buildFragment(elems,context,scripts,selection,ignored){var elem,tmp,tag,wrap,contains,j,fragment=context.createDocumentFragment(),nodes=[],i=0,l=elems.length;for(;i < l;i++) {elem = elems[i];if(elem || elem === 0){ // Add nodes directly\nif(jQuery.type(elem) === \"object\"){ // Support: Android <=4.0 only, PhantomJS 1 only\n// push.apply(_, arraylike) throws on ancient WebKit\njQuery.merge(nodes,elem.nodeType?[elem]:elem); // Convert non-html into a text node\n}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n}else {tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\ntag = (rtagName.exec(elem) || [\"\",\"\"])[1].toLowerCase();wrap = wrapMap[tag] || wrapMap._default;tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\nj = wrap[0];while(j--) {tmp = tmp.lastChild;} // Support: Android <=4.0 only, PhantomJS 1 only\n// push.apply(_, arraylike) throws on ancient WebKit\njQuery.merge(nodes,tmp.childNodes); // Remember the top-level container\ntmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\ntmp.textContent = \"\";}}} // Remove wrapper from fragment\nfragment.textContent = \"\";i = 0;while(elem = nodes[i++]) { // Skip elements already in the context collection (trac-4087)\nif(selection && jQuery.inArray(elem,selection) > -1){if(ignored){ignored.push(elem);}continue;}contains = jQuery.contains(elem.ownerDocument,elem); // Append to fragment\ntmp = getAll(fragment.appendChild(elem),\"script\"); // Preserve script evaluation history\nif(contains){setGlobalEval(tmp);} // Capture executables\nif(scripts){j = 0;while(elem = tmp[j++]) {if(rscriptType.test(elem.type || \"\")){scripts.push(elem);}}}}return fragment;}(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement(\"div\")),input=document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n// Check state lost if the name is set (#11217)\n// Support: Windows Web Apps (WWA)\n// `name` and `type` must use .setAttribute for WWA (#14901)\ninput.setAttribute(\"type\",\"radio\");input.setAttribute(\"checked\",\"checked\");input.setAttribute(\"name\",\"t\");div.appendChild(input); // Support: Android <=4.1 only\n// Older WebKit doesn't clone checked state correctly in fragments\nsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n// Make sure textarea (and checkbox) defaultValue is properly cloned\ndiv.innerHTML = \"<textarea>x</textarea>\";support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;})();var documentElement=document.documentElement;var rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\\.(.+)|)/;function returnTrue(){return true;}function returnFalse(){return false;} // Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement(){try{return document.activeElement;}catch(err) {}}function _on(elem,types,selector,data,fn,one){var origFn,type; // Types can be a map of types/handlers\nif(typeof types === \"object\"){ // ( types-Object, selector, data )\nif(typeof selector !== \"string\"){ // ( types-Object, data )\ndata = data || selector;selector = undefined;}for(type in types) {_on(elem,type,selector,data,types[type],one);}return elem;}if(data == null && fn == null){ // ( types, fn )\nfn = selector;data = selector = undefined;}else if(fn == null){if(typeof selector === \"string\"){ // ( types, selector, fn )\nfn = data;data = undefined;}else { // ( types, data, fn )\nfn = data;data = selector;selector = undefined;}}if(fn === false){fn = returnFalse;}else if(!fn){return elem;}if(one === 1){origFn = fn;fn = function(event){ // Can use an empty set, since event contains the info\njQuery().off(event);return origFn.apply(this,arguments);}; // Use same guid so caller can remove using origFn\nfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector);});} /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */jQuery.event = {global:{},add:function add(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem); // Don't attach events to noData or text/comment nodes (but allow plain objects)\nif(!elemData){return;} // Caller can pass in an object of custom data in lieu of the handler\nif(handler.handler){handleObjIn = handler;handler = handleObjIn.handler;selector = handleObjIn.selector;} // Ensure that invalid selectors throw exceptions at attach time\n// Evaluate against documentElement in case elem is a non-element node (e.g., document)\nif(selector){jQuery.find.matchesSelector(documentElement,selector);} // Make sure that the handler has a unique ID, used to find/remove it later\nif(!handler.guid){handler.guid = jQuery.guid++;} // Init the element's event structure and main handler, if this is the first\nif(!(events = elemData.events)){events = elemData.events = {};}if(!(eventHandle = elemData.handle)){eventHandle = elemData.handle = function(e){ // Discard the second event of a jQuery.event.trigger() and\n// when an event is called after a page has unloaded\nreturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type?jQuery.event.dispatch.apply(elem,arguments):undefined;};} // Handle multiple events separated by a space\ntypes = (types || \"\").match(rnothtmlwhite) || [\"\"];t = types.length;while(t--) {tmp = rtypenamespace.exec(types[t]) || [];type = origType = tmp[1];namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\nif(!type){continue;} // If event changes its type, use the special event handlers for the changed type\nspecial = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\ntype = (selector?special.delegateType:special.bindType) || type; // Update special based on newly reset type\nspecial = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\nhandleObj = jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector && jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(\".\")},handleObjIn); // Init the event handler queue if we're the first\nif(!(handlers = events[type])){handlers = events[type] = [];handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\nif(!special.setup || special.setup.call(elem,data,namespaces,eventHandle) === false){if(elem.addEventListener){elem.addEventListener(type,eventHandle);}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid = handler.guid;}} // Add to the element's handler list, delegates in front\nif(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else {handlers.push(handleObj);} // Keep track of which events have ever been used, for event optimization\njQuery.event.global[type] = true;}}, // Detach an event or set of events from an element\nremove:function remove(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem) && dataPriv.get(elem);if(!elemData || !(events = elemData.events)){return;} // Once for each type.namespace in types; type may be omitted\ntypes = (types || \"\").match(rnothtmlwhite) || [\"\"];t = types.length;while(t--) {tmp = rtypenamespace.exec(types[t]) || [];type = origType = tmp[1];namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\nif(!type){for(type in events) {jQuery.event.remove(elem,type + types[t],handler,selector,true);}continue;}special = jQuery.event.special[type] || {};type = (selector?special.delegateType:special.bindType) || type;handlers = events[type] || [];tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\norigCount = j = handlers.length;while(j--) {handleObj = handlers[j];if((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--;}if(special.remove){special.remove.call(elem,handleObj);}}} // Remove generic event handler if we removed something and no more handlers exist\n// (avoids potential for endless recursion during removal of special event handlers)\nif(origCount && !handlers.length){if(!special.teardown || special.teardown.call(elem,namespaces,elemData.handle) === false){jQuery.removeEvent(elem,type,elemData.handle);}delete events[type];}} // Remove data and the expando if it's no longer used\nif(jQuery.isEmptyObject(events)){dataPriv.remove(elem,\"handle events\");}},dispatch:function dispatch(nativeEvent){ // Make a writable jQuery.Event from the native event object\nvar event=jQuery.event.fix(nativeEvent);var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),handlers=(dataPriv.get(this,\"events\") || {})[event.type] || [],special=jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\nargs[0] = event;for(i = 1;i < arguments.length;i++) {args[i] = arguments[i];}event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\nif(special.preDispatch && special.preDispatch.call(this,event) === false){return;} // Determine handlers\nhandlerQueue = jQuery.event.handlers.call(this,event,handlers); // Run delegates first; they may want to stop propagation beneath us\ni = 0;while((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {event.currentTarget = matched.elem;j = 0;while((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) { // Triggered event must either 1) have no namespace, or 2) have namespace(s)\n// a subset or equal to those in the bound event (both can have no namespace).\nif(!event.rnamespace || event.rnamespace.test(handleObj.namespace)){event.handleObj = handleObj;event.data = handleObj.data;ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem,args);if(ret !== undefined){if((event.result = ret) === false){event.preventDefault();event.stopPropagation();}}}}} // Call the postDispatch hook for the mapped type\nif(special.postDispatch){special.postDispatch.call(this,event);}return event.result;},handlers:function handlers(event,_handlers){var i,handleObj,sel,matchedHandlers,matchedSelectors,handlerQueue=[],delegateCount=_handlers.delegateCount,cur=event.target; // Find delegate handlers\nif(delegateCount &&  // Support: IE <=9\n// Black-hole SVG <use> instance trees (trac-13180)\ncur.nodeType &&  // Support: Firefox <=42\n// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n// Support: IE 11 only\n// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n!(event.type === \"click\" && event.button >= 1)){for(;cur !== this;cur = cur.parentNode || this) { // Don't check non-elements (#13208)\n// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\nif(cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)){matchedHandlers = [];matchedSelectors = {};for(i = 0;i < delegateCount;i++) {handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\nsel = handleObj.selector + \" \";if(matchedSelectors[sel] === undefined){matchedSelectors[sel] = handleObj.needsContext?jQuery(sel,this).index(cur) > -1:jQuery.find(sel,this,null,[cur]).length;}if(matchedSelectors[sel]){matchedHandlers.push(handleObj);}}if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers});}}}} // Add the remaining (directly-bound) handlers\ncur = this;if(delegateCount < _handlers.length){handlerQueue.push({elem:cur,handlers:_handlers.slice(delegateCount)});}return handlerQueue;},addProp:function addProp(name,hook){Object.defineProperty(jQuery.Event.prototype,name,{enumerable:true,configurable:true,get:jQuery.isFunction(hook)?function(){if(this.originalEvent){return hook(this.originalEvent);}}:function(){if(this.originalEvent){return this.originalEvent[name];}},set:function set(value){Object.defineProperty(this,name,{enumerable:true,configurable:true,writable:true,value:value});}});},fix:function fix(originalEvent){return originalEvent[jQuery.expando]?originalEvent:new jQuery.Event(originalEvent);},special:{load:{ // Prevent triggered image.load events from bubbling to window.load\nnoBubble:true},focus:{ // Fire native event if possible so blur/focus sequence is correct\ntrigger:function trigger(){if(this !== safeActiveElement() && this.focus){this.focus();return false;}},delegateType:\"focusin\"},blur:{trigger:function trigger(){if(this === safeActiveElement() && this.blur){this.blur();return false;}},delegateType:\"focusout\"},click:{ // For checkbox, fire native event so checked state will be right\ntrigger:function trigger(){if(this.type === \"checkbox\" && this.click && nodeName(this,\"input\")){this.click();return false;}}, // For cross-browser consistency, don't fire native .click() on links\n_default:function _default(event){return nodeName(event.target,\"a\");}},beforeunload:{postDispatch:function postDispatch(event){ // Support: Firefox 20+\n// Firefox doesn't alert if the returnValue field is not set.\nif(event.result !== undefined && event.originalEvent){event.originalEvent.returnValue = event.result;}}}}};jQuery.removeEvent = function(elem,type,handle){ // This \"if\" is needed for plain objects\nif(elem.removeEventListener){elem.removeEventListener(type,handle);}};jQuery.Event = function(src,props){ // Allow instantiation without the 'new' keyword\nif(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props);} // Event object\nif(src && src.type){this.originalEvent = src;this.type = src.type; // Events bubbling up the document may have been marked as prevented\n// by a handler lower down the tree; reflect the correct value.\nthis.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined &&  // Support: Android <=2.3 only\nsrc.returnValue === false?returnTrue:returnFalse; // Create target properties\n// Support: Safari <=6 - 7 only\n// Target should not be a text node (#504, #13143)\nthis.target = src.target && src.target.nodeType === 3?src.target.parentNode:src.target;this.currentTarget = src.currentTarget;this.relatedTarget = src.relatedTarget; // Event type\n}else {this.type = src;} // Put explicitly provided properties onto the event object\nif(props){jQuery.extend(this,props);} // Create a timestamp if incoming event doesn't have one\nthis.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed\nthis[jQuery.expando] = true;}; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:false,preventDefault:function preventDefault(){var e=this.originalEvent;this.isDefaultPrevented = returnTrue;if(e && !this.isSimulated){e.preventDefault();}},stopPropagation:function stopPropagation(){var e=this.originalEvent;this.isPropagationStopped = returnTrue;if(e && !this.isSimulated){e.stopPropagation();}},stopImmediatePropagation:function stopImmediatePropagation(){var e=this.originalEvent;this.isImmediatePropagationStopped = returnTrue;if(e && !this.isSimulated){e.stopImmediatePropagation();}this.stopPropagation();}}; // Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each({altKey:true,bubbles:true,cancelable:true,changedTouches:true,ctrlKey:true,detail:true,eventPhase:true,metaKey:true,pageX:true,pageY:true,shiftKey:true,view:true,\"char\":true,charCode:true,key:true,keyCode:true,button:true,buttons:true,clientX:true,clientY:true,offsetX:true,offsetY:true,pointerId:true,pointerType:true,screenX:true,screenY:true,targetTouches:true,toElement:true,touches:true,which:function which(event){var button=event.button; // Add which for key events\nif(event.which == null && rkeyEvent.test(event.type)){return event.charCode != null?event.charCode:event.keyCode;} // Add which for click: 1 === left; 2 === middle; 3 === right\nif(!event.which && button !== undefined && rmouseEvent.test(event.type)){if(button & 1){return 1;}if(button & 2){return 3;}if(button & 4){return 2;}return 0;}return event.which;}},jQuery.event.addProp); // Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(orig,fix){jQuery.event.special[orig] = {delegateType:fix,bindType:fix,handle:function handle(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n// NB: No relatedTarget if the mouse left/entered the browser window\nif(!related || related !== target && !jQuery.contains(target,related)){event.type = handleObj.origType;ret = handleObj.handler.apply(this,arguments);event.type = fix;}return ret;}};});jQuery.fn.extend({on:function on(types,selector,data,fn){return _on(this,types,selector,data,fn);},one:function one(types,selector,data,fn){return _on(this,types,selector,data,fn,1);},off:function off(types,selector,fn){var handleObj,type;if(types && types.preventDefault && types.handleObj){ // ( event )  dispatched jQuery.Event\nhandleObj = types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType + \".\" + handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this;}if(typeof types === \"object\"){ // ( types-object [, selector] )\nfor(type in types) {this.off(type,selector,types[type]);}return this;}if(selector === false || typeof selector === \"function\"){ // ( types [, fn] )\nfn = selector;selector = undefined;}if(fn === false){fn = returnFalse;}return this.each(function(){jQuery.event.remove(this,types,fn,selector);});}});var  /* eslint-disable max-len */ // See https://github.com/eslint/eslint/issues/3229\nrxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi, /* eslint-enable */ // Support: IE <=10 - 11, Edge 12 - 13\n// In IE/Edge using regex groups here causes severe slowdowns.\n// See https://connect.microsoft.com/IE/feedback/details/1736512/\nrnoInnerhtml=/<script|<style|<link/i, // checked=\"checked\" or checked\nrchecked=/checked\\s*(?:[^=]|=\\s*.checked.)/i,rscriptTypeMasked=/^true\\/(.*)/,rcleanScript=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget(elem,content){if(nodeName(elem,\"table\") && nodeName(content.nodeType !== 11?content:content.firstChild,\"tr\")){return jQuery(\">tbody\",elem)[0] || elem;}return elem;} // Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript(elem){elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;return elem;}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type = match[1];}else {elem.removeAttribute(\"type\");}return elem;}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(dest.nodeType !== 1){return;} // 1. Copy private data: events, handlers, etc.\nif(dataPriv.hasData(src)){pdataOld = dataPriv.access(src);pdataCur = dataPriv.set(dest,pdataOld);events = pdataOld.events;if(events){delete pdataCur.handle;pdataCur.events = {};for(type in events) {for(i = 0,l = events[type].length;i < l;i++) {jQuery.event.add(dest,type,events[type][i]);}}}} // 2. Copy user data\nif(dataUser.hasData(src)){udataOld = dataUser.access(src);udataCur = jQuery.extend({},udataOld);dataUser.set(dest,udataCur);}} // Fix IE bugs, see support tests\nfunction fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\nif(nodeName === \"input\" && rcheckableType.test(src.type)){dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n}else if(nodeName === \"input\" || nodeName === \"textarea\"){dest.defaultValue = src.defaultValue;}}function domManip(collection,args,callback,ignored){ // Flatten any nested arrays\nargs = concat.apply([],args);var fragment,first,scripts,hasScripts,node,doc,i=0,l=collection.length,iNoClone=l - 1,value=args[0],isFunction=jQuery.isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\nif(isFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(isFunction){args[0] = value.call(this,index,self.html());}domManip(self,args,callback,ignored);});}if(l){fragment = buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first = fragment.firstChild;if(fragment.childNodes.length === 1){fragment = first;} // Require either new content or an interest in ignored elements to invoke the callback\nif(first || ignored){scripts = jQuery.map(getAll(fragment,\"script\"),disableScript);hasScripts = scripts.length; // Use the original fragment for the last item\n// instead of the first because it can end up\n// being emptied incorrectly in certain situations (#8070).\nfor(;i < l;i++) {node = fragment;if(i !== iNoClone){node = jQuery.clone(node,true,true); // Keep references to cloned scripts for later restoration\nif(hasScripts){ // Support: Android <=4.0 only, PhantomJS 1 only\n// push.apply(_, arraylike) throws on ancient WebKit\njQuery.merge(scripts,getAll(node,\"script\"));}}callback.call(collection[i],node,i);}if(hasScripts){doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\njQuery.map(scripts,restoreScript); // Evaluate executable scripts on first document insertion\nfor(i = 0;i < hasScripts;i++) {node = scripts[i];if(rscriptType.test(node.type || \"\") && !dataPriv.access(node,\"globalEval\") && jQuery.contains(doc,node)){if(node.src){ // Optional AJAX dependency, but won't run scripts if not present\nif(jQuery._evalUrl){jQuery._evalUrl(node.src);}}else {DOMEval(node.textContent.replace(rcleanScript,\"\"),doc);}}}}}}return collection;}function _remove(elem,selector,keepData){var node,nodes=selector?jQuery.filter(selector,elem):elem,i=0;for(;(node = nodes[i]) != null;i++) {if(!keepData && node.nodeType === 1){jQuery.cleanData(getAll(node));}if(node.parentNode){if(keepData && jQuery.contains(node.ownerDocument,node)){setGlobalEval(getAll(node,\"script\"));}node.parentNode.removeChild(node);}}return elem;}jQuery.extend({htmlPrefilter:function htmlPrefilter(html){return html.replace(rxhtmlTag,\"<$1></$2>\");},clone:function clone(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=jQuery.contains(elem.ownerDocument,elem); // Fix IE cloning issues\nif(!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)){ // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\ndestElements = getAll(clone);srcElements = getAll(elem);for(i = 0,l = srcElements.length;i < l;i++) {fixInput(srcElements[i],destElements[i]);}} // Copy the events from the original to the clone\nif(dataAndEvents){if(deepDataAndEvents){srcElements = srcElements || getAll(elem);destElements = destElements || getAll(clone);for(i = 0,l = srcElements.length;i < l;i++) {cloneCopyEvent(srcElements[i],destElements[i]);}}else {cloneCopyEvent(elem,clone);}} // Preserve script evaluation history\ndestElements = getAll(clone,\"script\");if(destElements.length > 0){setGlobalEval(destElements,!inPage && getAll(elem,\"script\"));} // Return the cloned set\nreturn clone;},cleanData:function cleanData(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem = elems[i]) !== undefined;i++) {if(acceptData(elem)){if(data = elem[dataPriv.expando]){if(data.events){for(type in data.events) {if(special[type]){jQuery.event.remove(elem,type); // This is a shortcut to avoid jQuery.event.remove's overhead\n}else {jQuery.removeEvent(elem,type,data.handle);}}} // Support: Chrome <=35 - 45+\n// Assign undefined instead of using delete, see Data#remove\nelem[dataPriv.expando] = undefined;}if(elem[dataUser.expando]){ // Support: Chrome <=35 - 45+\n// Assign undefined instead of using delete, see Data#remove\nelem[dataUser.expando] = undefined;}}}}});jQuery.fn.extend({detach:function detach(selector){return _remove(this,selector,true);},remove:function remove(selector){return _remove(this,selector);},text:function text(value){return access(this,function(value){return value === undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9){this.textContent = value;}});},null,value,arguments.length);},append:function append(){return domManip(this,arguments,function(elem){if(this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9){var target=manipulationTarget(this,elem);target.appendChild(elem);}});},prepend:function prepend(){return domManip(this,arguments,function(elem){if(this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild);}});},before:function before(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this);}});},after:function after(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling);}});},empty:function empty(){var elem,i=0;for(;(elem = this[i]) != null;i++) {if(elem.nodeType === 1){ // Prevent memory leaks\njQuery.cleanData(getAll(elem,false)); // Remove any remaining nodes\nelem.textContent = \"\";}}return this;},clone:function clone(dataAndEvents,deepDataAndEvents){dataAndEvents = dataAndEvents == null?false:dataAndEvents;deepDataAndEvents = deepDataAndEvents == null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents);});},html:function html(value){return access(this,function(value){var elem=this[0] || {},i=0,l=this.length;if(value === undefined && elem.nodeType === 1){return elem.innerHTML;} // See if we can take a shortcut and just use innerHTML\nif(typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\",\"\"])[1].toLowerCase()]){value = jQuery.htmlPrefilter(value);try{for(;i < l;i++) {elem = this[i] || {}; // Remove element nodes and prevent memory leaks\nif(elem.nodeType === 1){jQuery.cleanData(getAll(elem,false));elem.innerHTML = value;}}elem = 0; // If using innerHTML throws an exception, use the fallback method\n}catch(e) {}}if(elem){this.empty().append(value);}},null,value,arguments.length);},replaceWith:function replaceWith(){var ignored=[]; // Make the changes, replacing each non-ignored context element with the new content\nreturn domManip(this,arguments,function(elem){var parent=this.parentNode;if(jQuery.inArray(this,ignored) < 0){jQuery.cleanData(getAll(this));if(parent){parent.replaceChild(elem,this);}} // Force callback invocation\n},ignored);}});jQuery.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(name,original){jQuery.fn[name] = function(selector){var elems,ret=[],insert=jQuery(selector),last=insert.length - 1,i=0;for(;i <= last;i++) {elems = i === last?this:this.clone(true);jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n// .get() because push.apply(_, arraylike) throws on ancient WebKit\npush.apply(ret,elems.get());}return this.pushStack(ret);};});var rmargin=/^margin/;var rnumnonpx=new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\",\"i\");var getStyles=function getStyles(elem){ // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n// IE throws on elements created in popups\n// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\nvar view=elem.ownerDocument.defaultView;if(!view || !view.opener){view = window;}return view.getComputedStyle(elem);};(function(){ // Executing both pixelPosition & boxSizingReliable tests require only one layout\n// so they're executed at the same time to save the second computation.\nfunction computeStyleTests(){ // This is a singleton, we need to execute it only once\nif(!div){return;}div.style.cssText = \"box-sizing:border-box;\" + \"position:relative;display:block;\" + \"margin:auto;border:1px;padding:1px;\" + \"top:1%;width:50%\";div.innerHTML = \"\";documentElement.appendChild(container);var divStyle=window.getComputedStyle(div);pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\nreliableMarginLeftVal = divStyle.marginLeft === \"2px\";boxSizingReliableVal = divStyle.width === \"4px\"; // Support: Android 4.0 - 4.3 only\n// Some styles come back with percentage values, even though they shouldn't\ndiv.style.marginRight = \"50%\";pixelMarginRightVal = divStyle.marginRight === \"4px\";documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n// it will also be a sign that checks already performed\ndiv = null;}var pixelPositionVal,boxSizingReliableVal,pixelMarginRightVal,reliableMarginLeftVal,container=document.createElement(\"div\"),div=document.createElement(\"div\"); // Finish early in limited (non-browser) environments\nif(!div.style){return;} // Support: IE <=9 - 11 only\n// Style of cloned element affects source element cloned (#8908)\ndiv.style.backgroundClip = \"content-box\";div.cloneNode(true).style.backgroundClip = \"\";support.clearCloneStyle = div.style.backgroundClip === \"content-box\";container.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" + \"padding:0;margin-top:1px;position:absolute\";container.appendChild(div);jQuery.extend(support,{pixelPosition:function pixelPosition(){computeStyleTests();return pixelPositionVal;},boxSizingReliable:function boxSizingReliable(){computeStyleTests();return boxSizingReliableVal;},pixelMarginRight:function pixelMarginRight(){computeStyleTests();return pixelMarginRightVal;},reliableMarginLeft:function reliableMarginLeft(){computeStyleTests();return reliableMarginLeftVal;}});})();function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret, // Support: Firefox 51+\n// Retrieving style before computed somehow\n// fixes an issue with getting wrong values\n// on detached elements\nstyle=elem.style;computed = computed || getStyles(elem); // getPropertyValue is needed for:\n//   .css('filter') (IE 9 only, #12537)\n//   .css('--customProperty) (#3144)\nif(computed){ret = computed.getPropertyValue(name) || computed[name];if(ret === \"\" && !jQuery.contains(elem.ownerDocument,elem)){ret = jQuery.style(elem,name);} // A tribute to the \"awesome hack by Dean Edwards\"\n// Android Browser returns percentage for some values,\n// but width seems to be reliably pixels.\n// This is against the CSSOM draft spec:\n// https://drafts.csswg.org/cssom/#resolved-values\nif(!support.pixelMarginRight() && rnumnonpx.test(ret) && rmargin.test(name)){ // Remember the original values\nwidth = style.width;minWidth = style.minWidth;maxWidth = style.maxWidth; // Put in the new values to get a computed value out\nstyle.minWidth = style.maxWidth = style.width = ret;ret = computed.width; // Revert the changed values\nstyle.width = width;style.minWidth = minWidth;style.maxWidth = maxWidth;}}return ret !== undefined? // Support: IE <=9 - 11 only\n// IE returns zIndex value as an integer.\nret + \"\":ret;}function addGetHookIf(conditionFn,hookFn){ // Define the hook, we'll check on the first run if it's really needed.\nreturn {get:function get(){if(conditionFn()){ // Hook not needed (or it's not possible to use it due\n// to missing dependency), remove it.\ndelete this.get;return;} // Hook needed; redefine it so that the support test is not executed again.\nreturn (this.get = hookFn).apply(this,arguments);}};}var  // Swappable if display is none or starts with table\n// except \"table\", \"table-cell\", or \"table-caption\"\n// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\nrdisplayswap=/^(none|table(?!-c[ea]).+)/,rcustomProp=/^--/,cssShow={position:\"absolute\",visibility:\"hidden\",display:\"block\"},cssNormalTransform={letterSpacing:\"0\",fontWeight:\"400\"},cssPrefixes=[\"Webkit\",\"Moz\",\"ms\"],emptyStyle=document.createElement(\"div\").style; // Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName(name){ // Shortcut for names that are not vendor prefixed\nif(name in emptyStyle){return name;} // Check for vendor prefixed names\nvar capName=name[0].toUpperCase() + name.slice(1),i=cssPrefixes.length;while(i--) {name = cssPrefixes[i] + capName;if(name in emptyStyle){return name;}}} // Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName(name){var ret=jQuery.cssProps[name];if(!ret){ret = jQuery.cssProps[name] = vendorPropName(name) || name;}return ret;}function setPositiveNumber(elem,value,subtract){ // Any relative (+/-) values have already been\n// normalized at this point\nvar matches=rcssNum.exec(value);return matches? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\nMath.max(0,matches[2] - (subtract || 0)) + (matches[3] || \"px\"):value;}function augmentWidthOrHeight(elem,name,extra,isBorderBox,styles){var i,val=0; // If we already have the right measurement, avoid augmentation\nif(extra === (isBorderBox?\"border\":\"content\")){i = 4; // Otherwise initialize for horizontal or vertical properties\n}else {i = name === \"width\"?1:0;}for(;i < 4;i += 2) { // Both box models exclude margin, so add it if we want it\nif(extra === \"margin\"){val += jQuery.css(elem,extra + cssExpand[i],true,styles);}if(isBorderBox){ // border-box includes padding, so remove it if we want content\nif(extra === \"content\"){val -= jQuery.css(elem,\"padding\" + cssExpand[i],true,styles);} // At this point, extra isn't border nor margin, so remove border\nif(extra !== \"margin\"){val -= jQuery.css(elem,\"border\" + cssExpand[i] + \"Width\",true,styles);}}else { // At this point, extra isn't content, so add padding\nval += jQuery.css(elem,\"padding\" + cssExpand[i],true,styles); // At this point, extra isn't content nor padding, so add border\nif(extra !== \"padding\"){val += jQuery.css(elem,\"border\" + cssExpand[i] + \"Width\",true,styles);}}}return val;}function getWidthOrHeight(elem,name,extra){ // Start with computed style\nvar valueIsBorderBox,styles=getStyles(elem),val=curCSS(elem,name,styles),isBorderBox=jQuery.css(elem,\"boxSizing\",false,styles) === \"border-box\"; // Computed unit is not pixels. Stop here and return.\nif(rnumnonpx.test(val)){return val;} // Check for style in case a browser which returns unreliable values\n// for getComputedStyle silently falls back to the reliable elem.style\nvalueIsBorderBox = isBorderBox && (support.boxSizingReliable() || val === elem.style[name]); // Fall back to offsetWidth/Height when value is \"auto\"\n// This happens for inline elements with no explicit setting (gh-3571)\nif(val === \"auto\"){val = elem[\"offset\" + name[0].toUpperCase() + name.slice(1)];} // Normalize \"\", auto, and prepare for extra\nval = parseFloat(val) || 0; // Use the active box-sizing model to add/subtract irrelevant styles\nreturn val + augmentWidthOrHeight(elem,name,extra || (isBorderBox?\"border\":\"content\"),valueIsBorderBox,styles) + \"px\";}jQuery.extend({ // Add in style property hooks for overriding the default\n// behavior of getting and setting a style property\ncssHooks:{opacity:{get:function get(elem,computed){if(computed){ // We should always get a number back from opacity\nvar ret=curCSS(elem,\"opacity\");return ret === \"\"?\"1\":ret;}}}}, // Don't automatically add \"px\" to these possibly-unitless properties\ncssNumber:{\"animationIterationCount\":true,\"columnCount\":true,\"fillOpacity\":true,\"flexGrow\":true,\"flexShrink\":true,\"fontWeight\":true,\"lineHeight\":true,\"opacity\":true,\"order\":true,\"orphans\":true,\"widows\":true,\"zIndex\":true,\"zoom\":true}, // Add in properties whose names you wish to fix before\n// setting or getting the value\ncssProps:{\"float\":\"cssFloat\"}, // Get and set the style property on a DOM Node\nstyle:function style(elem,name,value,extra){ // Don't set styles on text and comment nodes\nif(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style){return;} // Make sure that we're working with the right name\nvar ret,type,hooks,origName=jQuery.camelCase(name),isCustomProp=rcustomProp.test(name),style=elem.style; // Make sure that we're working with the right name. We don't\n// want to query the value if it is a CSS custom property\n// since they are user-defined.\nif(!isCustomProp){name = finalPropName(origName);} // Gets hook for the prefixed version, then unprefixed version\nhooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\nif(value !== undefined){type = typeof value; // Convert \"+=\" or \"-=\" to relative numbers (#7345)\nif(type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]){value = adjustCSS(elem,name,ret); // Fixes bug #9237\ntype = \"number\";} // Make sure that null and NaN values aren't set (#7116)\nif(value == null || value !== value){return;} // If a number was passed in, add the unit (except for certain CSS properties)\nif(type === \"number\"){value += ret && ret[3] || (jQuery.cssNumber[origName]?\"\":\"px\");} // background-* props affect original clone's values\nif(!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0){style[name] = \"inherit\";} // If a hook was provided, use that value, otherwise just set the specified value\nif(!hooks || !(\"set\" in hooks) || (value = hooks.set(elem,value,extra)) !== undefined){if(isCustomProp){style.setProperty(name,value);}else {style[name] = value;}}}else { // If a hook was provided get the non-computed value from there\nif(hooks && \"get\" in hooks && (ret = hooks.get(elem,false,extra)) !== undefined){return ret;} // Otherwise just get the value from the style object\nreturn style[name];}},css:function css(elem,name,extra,styles){var val,num,hooks,origName=jQuery.camelCase(name),isCustomProp=rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n// want to modify the value if it is a CSS custom property\n// since they are user-defined.\nif(!isCustomProp){name = finalPropName(origName);} // Try prefixed name followed by the unprefixed name\nhooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\nif(hooks && \"get\" in hooks){val = hooks.get(elem,true,extra);} // Otherwise, if a way to get the computed value exists, use that\nif(val === undefined){val = curCSS(elem,name,styles);} // Convert \"normal\" to computed value\nif(val === \"normal\" && name in cssNormalTransform){val = cssNormalTransform[name];} // Make numeric if forced or a qualifier was provided and val looks numeric\nif(extra === \"\" || extra){num = parseFloat(val);return extra === true || isFinite(num)?num || 0:val;}return val;}});jQuery.each([\"height\",\"width\"],function(i,name){jQuery.cssHooks[name] = {get:function get(elem,computed,extra){if(computed){ // Certain elements can have dimension info if we invisibly show them\n// but it must have a current display style that would benefit\nreturn rdisplayswap.test(jQuery.css(elem,\"display\")) && ( // Support: Safari 8+\n// Table columns in Safari have non-zero offsetWidth & zero\n// getBoundingClientRect().width unless display is changed.\n// Support: IE <=11 only\n// Running getBoundingClientRect on a disconnected node\n// in IE throws an error.\n!elem.getClientRects().length || !elem.getBoundingClientRect().width)?swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra);}):getWidthOrHeight(elem,name,extra);}},set:function set(elem,value,extra){var matches,styles=extra && getStyles(elem),subtract=extra && augmentWidthOrHeight(elem,name,extra,jQuery.css(elem,\"boxSizing\",false,styles) === \"border-box\",styles); // Convert to pixels if value adjustment is needed\nif(subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\"){elem.style[name] = value;value = jQuery.css(elem,name);}return setPositiveNumber(elem,value,subtract);}};});jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return (parseFloat(curCSS(elem,\"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left;})) + \"px\";}}); // These hooks are used by animate to expand properties\njQuery.each({margin:\"\",padding:\"\",border:\"Width\"},function(prefix,suffix){jQuery.cssHooks[prefix + suffix] = {expand:function expand(value){var i=0,expanded={}, // Assumes a single number if not a string\nparts=typeof value === \"string\"?value.split(\" \"):[value];for(;i < 4;i++) {expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];}return expanded;}};if(!rmargin.test(prefix)){jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;}});jQuery.fn.extend({css:function css(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(Array.isArray(name)){styles = getStyles(elem);len = name.length;for(;i < len;i++) {map[name[i]] = jQuery.css(elem,name[i],false,styles);}return map;}return value !== undefined?jQuery.style(elem,name,value):jQuery.css(elem,name);},name,value,arguments.length > 1);}}); // Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function(time,type){time = jQuery.fx?jQuery.fx.speeds[time] || time:time;type = type || \"fx\";return this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop = function(){window.clearTimeout(timeout);};});};(function(){var input=document.createElement(\"input\"),select=document.createElement(\"select\"),opt=select.appendChild(document.createElement(\"option\"));input.type = \"checkbox\"; // Support: Android <=4.3 only\n// Default value for a checkbox should be \"on\"\nsupport.checkOn = input.value !== \"\"; // Support: IE <=11 only\n// Must access selectedIndex to make default options select\nsupport.optSelected = opt.selected; // Support: IE <=11 only\n// An input loses its value after becoming a radio\ninput = document.createElement(\"input\");input.value = \"t\";input.type = \"radio\";support.radioValue = input.value === \"t\";})();var boolHook,attrHandle=jQuery.expr.attrHandle;jQuery.fn.extend({attr:function attr(name,value){return access(this,jQuery.attr,name,value,arguments.length > 1);},removeAttr:function removeAttr(name){return this.each(function(){jQuery.removeAttr(this,name);});}});jQuery.extend({attr:function attr(elem,name,value){var ret,hooks,nType=elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\nif(nType === 3 || nType === 8 || nType === 2){return;} // Fallback to prop when attributes are not supported\nif(typeof elem.getAttribute === \"undefined\"){return jQuery.prop(elem,name,value);} // Attribute hooks are determined by the lowercase version\n// Grab necessary hook if one is defined\nif(nType !== 1 || !jQuery.isXMLDoc(elem)){hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name)?boolHook:undefined);}if(value !== undefined){if(value === null){jQuery.removeAttr(elem,name);return;}if(hooks && \"set\" in hooks && (ret = hooks.set(elem,value,name)) !== undefined){return ret;}elem.setAttribute(name,value + \"\");return value;}if(hooks && \"get\" in hooks && (ret = hooks.get(elem,name)) !== null){return ret;}ret = jQuery.find.attr(elem,name); // Non-existent attributes return null, we normalize to undefined\nreturn ret == null?undefined:ret;},attrHooks:{type:{set:function set(elem,value){if(!support.radioValue && value === \"radio\" && nodeName(elem,\"input\")){var val=elem.value;elem.setAttribute(\"type\",value);if(val){elem.value = val;}return value;}}}},removeAttr:function removeAttr(elem,value){var name,i=0, // Attribute names can contain non-HTML whitespace characters\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\nattrNames=value && value.match(rnothtmlwhite);if(attrNames && elem.nodeType === 1){while(name = attrNames[i++]) {elem.removeAttribute(name);}}}}); // Hooks for boolean attributes\nboolHook = {set:function set(elem,value,name){if(value === false){ // Remove boolean attributes when set to false\njQuery.removeAttr(elem,name);}else {elem.setAttribute(name,name);}return name;}};jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g),function(i,name){var getter=attrHandle[name] || jQuery.find.attr;attrHandle[name] = function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){ // Avoid an infinite loop by temporarily removing this function from the getter\nhandle = attrHandle[lowercaseName];attrHandle[lowercaseName] = ret;ret = getter(elem,name,isXML) != null?lowercaseName:null;attrHandle[lowercaseName] = handle;}return ret;};});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function prop(name,value){return access(this,jQuery.prop,name,value,arguments.length > 1);},removeProp:function removeProp(name){return this.each(function(){delete this[jQuery.propFix[name] || name];});}});jQuery.extend({prop:function prop(elem,name,value){var ret,hooks,nType=elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\nif(nType === 3 || nType === 8 || nType === 2){return;}if(nType !== 1 || !jQuery.isXMLDoc(elem)){ // Fix name and attach hooks\nname = jQuery.propFix[name] || name;hooks = jQuery.propHooks[name];}if(value !== undefined){if(hooks && \"set\" in hooks && (ret = hooks.set(elem,value,name)) !== undefined){return ret;}return elem[name] = value;}if(hooks && \"get\" in hooks && (ret = hooks.get(elem,name)) !== null){return ret;}return elem[name];},propHooks:{tabIndex:{get:function get(elem){ // Support: IE <=9 - 11 only\n// elem.tabIndex doesn't always return the\n// correct value when it hasn't been explicitly set\n// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n// Use proper attribute retrieval(#12072)\nvar tabindex=jQuery.find.attr(elem,\"tabindex\");if(tabindex){return parseInt(tabindex,10);}if(rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href){return 0;}return -1;}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}); // Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif(!support.optSelected){jQuery.propHooks.selected = {get:function get(elem){ /* eslint no-unused-expressions: \"off\" */var parent=elem.parentNode;if(parent && parent.parentNode){parent.parentNode.selectedIndex;}return null;},set:function set(elem){ /* eslint no-unused-expressions: \"off\" */var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}}};}jQuery.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){jQuery.propFix[this.toLowerCase()] = this;}); // Strip and collapse whitespace according to HTML spec\n// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\nfunction stripAndCollapse(value){var tokens=value.match(rnothtmlwhite) || [];return tokens.join(\" \");}function getClass(elem){return elem.getAttribute && elem.getAttribute(\"class\") || \"\";}jQuery.fn.extend({addClass:function addClass(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)));});}if(typeof value === \"string\" && value){classes = value.match(rnothtmlwhite) || [];while(elem = this[i++]) {curValue = getClass(elem);cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";if(cur){j = 0;while(clazz = classes[j++]) {if(cur.indexOf(\" \" + clazz + \" \") < 0){cur += clazz + \" \";}} // Only assign if different to avoid unneeded rendering.\nfinalValue = stripAndCollapse(cur);if(curValue !== finalValue){elem.setAttribute(\"class\",finalValue);}}}}return this;},removeClass:function removeClass(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)));});}if(!arguments.length){return this.attr(\"class\",\"\");}if(typeof value === \"string\" && value){classes = value.match(rnothtmlwhite) || [];while(elem = this[i++]) {curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\ncur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";if(cur){j = 0;while(clazz = classes[j++]) { // Remove *all* instances\nwhile(cur.indexOf(\" \" + clazz + \" \") > -1) {cur = cur.replace(\" \" + clazz + \" \",\" \");}} // Only assign if different to avoid unneeded rendering.\nfinalValue = stripAndCollapse(cur);if(curValue !== finalValue){elem.setAttribute(\"class\",finalValue);}}}}return this;},toggleClass:function toggleClass(value,stateVal){var type=typeof value;if(typeof stateVal === \"boolean\" && type === \"string\"){return stateVal?this.addClass(value):this.removeClass(value);}if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal);});}return this.each(function(){var className,i,self,classNames;if(type === \"string\"){ // Toggle individual class names\ni = 0;self = jQuery(this);classNames = value.match(rnothtmlwhite) || [];while(className = classNames[i++]) { // Check each className given, space separated list\nif(self.hasClass(className)){self.removeClass(className);}else {self.addClass(className);}} // Toggle whole class name\n}else if(value === undefined || type === \"boolean\"){className = getClass(this);if(className){ // Store className if set\ndataPriv.set(this,\"__className__\",className);} // If the element has a class name or if we're passed `false`,\n// then remove the whole classname (if there was one, the above saved it).\n// Otherwise bring back whatever was previously saved (if anything),\n// falling back to the empty string if nothing was stored.\nif(this.setAttribute){this.setAttribute(\"class\",className || value === false?\"\":dataPriv.get(this,\"__className__\") || \"\");}}});},hasClass:function hasClass(selector){var className,elem,i=0;className = \" \" + selector + \" \";while(elem = this[i++]) {if(elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1){return true;}}return false;}});var rreturn=/\\r/g;jQuery.fn.extend({val:function val(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks && \"get\" in hooks && (ret = hooks.get(elem,\"value\")) !== undefined){return ret;}ret = elem.value; // Handle most common string cases\nif(typeof ret === \"string\"){return ret.replace(rreturn,\"\");} // Handle cases where value is null/undef or number\nreturn ret == null?\"\":ret;}return;}isFunction = jQuery.isFunction(value);return this.each(function(i){var val;if(this.nodeType !== 1){return;}if(isFunction){val = value.call(this,i,jQuery(this).val());}else {val = value;} // Treat null/undefined as \"\"; convert numbers to string\nif(val == null){val = \"\";}else if(typeof val === \"number\"){val += \"\";}else if(Array.isArray(val)){val = jQuery.map(val,function(value){return value == null?\"\":value + \"\";});}hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\nif(!hooks || !(\"set\" in hooks) || hooks.set(this,val,\"value\") === undefined){this.value = val;}});}});jQuery.extend({valHooks:{option:{get:function get(elem){var val=jQuery.find.attr(elem,\"value\");return val != null?val: // Support: IE <=10 - 11 only\n// option.text throws exceptions (#14686, #14858)\n// Strip and collapse whitespace\n// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\nstripAndCollapse(jQuery.text(elem));}},select:{get:function get(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type === \"select-one\",values=one?null:[],max=one?index + 1:options.length;if(index < 0){i = max;}else {i = one?index:0;} // Loop through all the selected options\nfor(;i < max;i++) {option = options[i]; // Support: IE <=9 only\n// IE8-9 doesn't update selected after form reset (#2551)\nif((option.selected || i === index) &&  // Don't return options that are disabled or in a disabled optgroup\n!option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode,\"optgroup\"))){ // Get the specific value for the option\nvalue = jQuery(option).val(); // We don't need an array for one selects\nif(one){return value;} // Multi-Selects return an array\nvalues.push(value);}}return values;},set:function set(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--) {option = options[i]; /* eslint-disable no-cond-assign */if(option.selected = jQuery.inArray(jQuery.valHooks.option.get(option),values) > -1){optionSet = true;} /* eslint-enable no-cond-assign */} // Force browsers to behave consistently when non-matching value is set\nif(!optionSet){elem.selectedIndex = -1;}return values;}}}}); // Radios and checkboxes getter/setter\njQuery.each([\"radio\",\"checkbox\"],function(){jQuery.valHooks[this] = {set:function set(elem,value){if(Array.isArray(value)){return elem.checked = jQuery.inArray(jQuery(elem).val(),value) > -1;}}};if(!support.checkOn){jQuery.valHooks[this].get = function(elem){return elem.getAttribute(\"value\") === null?\"on\":elem.value;};}}); // Return jQuery for attributes-only inclusion\nvar rfocusMorph=/^(?:focusinfocus|focusoutblur)$/;jQuery.extend(jQuery.event,{trigger:function trigger(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,eventPath=[elem || document],type=hasOwn.call(event,\"type\")?event.type:event,namespaces=hasOwn.call(event,\"namespace\")?event.namespace.split(\".\"):[];cur = tmp = elem = elem || document; // Don't do events on text and comment nodes\nif(elem.nodeType === 3 || elem.nodeType === 8){return;} // focus/blur morphs to focusin/out; ensure we're not firing them right now\nif(rfocusMorph.test(type + jQuery.event.triggered)){return;}if(type.indexOf(\".\") > -1){ // Namespaced trigger; create a regexp to match event type in handle()\nnamespaces = type.split(\".\");type = namespaces.shift();namespaces.sort();}ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\nevent = event[jQuery.expando]?event:new jQuery.Event(type,typeof event === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\nevent.isTrigger = onlyHandlers?2:3;event.namespace = namespaces.join(\".\");event.rnamespace = event.namespace?new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"):null; // Clean up the event in case it is being reused\nevent.result = undefined;if(!event.target){event.target = elem;} // Clone any incoming data and prepend the event, creating the handler arg list\ndata = data == null?[event]:jQuery.makeArray(data,[event]); // Allow special events to draw outside the lines\nspecial = jQuery.event.special[type] || {};if(!onlyHandlers && special.trigger && special.trigger.apply(elem,data) === false){return;} // Determine event propagation path in advance, per W3C events spec (#9951)\n// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\nif(!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)){bubbleType = special.delegateType || type;if(!rfocusMorph.test(bubbleType + type)){cur = cur.parentNode;}for(;cur;cur = cur.parentNode) {eventPath.push(cur);tmp = cur;} // Only add window if we got to document (e.g., not plain obj or detached DOM)\nif(tmp === (elem.ownerDocument || document)){eventPath.push(tmp.defaultView || tmp.parentWindow || window);}} // Fire handlers on the event path\ni = 0;while((cur = eventPath[i++]) && !event.isPropagationStopped()) {event.type = i > 1?bubbleType:special.bindType || type; // jQuery handler\nhandle = (dataPriv.get(cur,\"events\") || {})[event.type] && dataPriv.get(cur,\"handle\");if(handle){handle.apply(cur,data);} // Native handler\nhandle = ontype && cur[ontype];if(handle && handle.apply && acceptData(cur)){event.result = handle.apply(cur,data);if(event.result === false){event.preventDefault();}}}event.type = type; // If nobody prevented the default action, do it now\nif(!onlyHandlers && !event.isDefaultPrevented()){if((!special._default || special._default.apply(eventPath.pop(),data) === false) && acceptData(elem)){ // Call a native DOM method on the target with the same name as the event.\n// Don't do default actions on window, that's where global variables be (#6170)\nif(ontype && jQuery.isFunction(elem[type]) && !jQuery.isWindow(elem)){ // Don't re-trigger an onFOO event when we call its FOO() method\ntmp = elem[ontype];if(tmp){elem[ontype] = null;} // Prevent re-triggering of the same event, since we already bubbled it above\njQuery.event.triggered = type;elem[type]();jQuery.event.triggered = undefined;if(tmp){elem[ontype] = tmp;}}}}return event.result;}, // Piggyback on a donor event to simulate a different one\n// Used only for `focus(in | out)` events\nsimulate:function simulate(type,elem,event){var e=jQuery.extend(new jQuery.Event(),event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem);}});jQuery.fn.extend({trigger:function trigger(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHandler:function triggerHandler(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true);}}});jQuery.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(i,name){ // Handle event binding\njQuery.fn[name] = function(data,fn){return arguments.length > 0?this.on(name,null,data,fn):this.trigger(name);};});jQuery.fn.extend({hover:function hover(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);}});support.focusin = \"onfocusin\" in window; // Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif(!support.focusin){jQuery.each({focus:\"focusin\",blur:\"focusout\"},function(orig,fix){ // Attach a single capturing handler on the document while someone wants focusin/focusout\nvar handler=function handler(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event));};jQuery.event.special[fix] = {setup:function setup(){var doc=this.ownerDocument || this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true);}dataPriv.access(doc,fix,(attaches || 0) + 1);},teardown:function teardown(){var doc=this.ownerDocument || this,attaches=dataPriv.access(doc,fix) - 1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix);}else {dataPriv.access(doc,fix,attaches);}}};});}var rbracket=/\\[\\]$/,rCRLF=/\\r?\\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj)){ // Serialize array item.\njQuery.each(obj,function(i,v){if(traditional || rbracket.test(prefix)){ // Treat each array item as a scalar.\nadd(prefix,v);}else { // Item is non-scalar (array or object), encode its numeric index.\nbuildParams(prefix + \"[\" + (typeof v === \"object\" && v != null?i:\"\") + \"]\",v,traditional,add);}});}else if(!traditional && jQuery.type(obj) === \"object\"){ // Serialize object item.\nfor(name in obj) {buildParams(prefix + \"[\" + name + \"]\",obj[name],traditional,add);}}else { // Serialize scalar item.\nadd(prefix,obj);}} // Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function(a,traditional){var prefix,s=[],add=function add(key,valueOrFunction){ // If value is a function, invoke it and use its return value\nvar value=jQuery.isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null?\"\":value);}; // If an array was passed in, assume that it is an array of form elements.\nif(Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)){ // Serialize the form elements\njQuery.each(a,function(){add(this.name,this.value);});}else { // If traditional, encode the \"old\" way (the way 1.3.2 or older\n// did it), otherwise encode params recursively.\nfor(prefix in a) {buildParams(prefix,a[prefix],traditional,add);}} // Return the resulting serialization\nreturn s.join(\"&\");};jQuery.fn.extend({serialize:function serialize(){return jQuery.param(this.serializeArray());},serializeArray:function serializeArray(){return this.map(function(){ // Can add propHook for \"elements\" to filter or add form elements\nvar elements=jQuery.prop(this,\"elements\");return elements?jQuery.makeArray(elements):this;}).filter(function(){var type=this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\nreturn this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));}).map(function(i,elem){var val=jQuery(this).val();if(val == null){return null;}if(Array.isArray(val)){return jQuery.map(val,function(val){return {name:elem.name,value:val.replace(rCRLF,\"\\r\\n\")};});}return {name:elem.name,value:val.replace(rCRLF,\"\\r\\n\")};}).get();}});jQuery.fn.extend({wrapAll:function wrapAll(html){var wrap;if(this[0]){if(jQuery.isFunction(html)){html = html.call(this[0]);} // The elements to wrap the target around\nwrap = jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);}wrap.map(function(){var elem=this;while(elem.firstElementChild) {elem = elem.firstElementChild;}return elem;}).append(this);}return this;},wrapInner:function wrapInner(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else {self.append(html);}});},wrap:function wrap(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html);});},unwrap:function unwrap(selector){this.parent(selector).not(\"body\").each(function(){jQuery(this).replaceWith(this.childNodes);});return this;}});jQuery.expr.pseudos.hidden = function(elem){return !jQuery.expr.pseudos.visible(elem);};jQuery.expr.pseudos.visible = function(elem){return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);}; // Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = (function(){var body=document.implementation.createHTMLDocument(\"\").body;body.innerHTML = \"<form></form><form></form>\";return body.childNodes.length === 2;})(); // Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function(data,context,keepScripts){if(typeof data !== \"string\"){return [];}if(typeof context === \"boolean\"){keepScripts = context;context = false;}var base,parsed,scripts;if(!context){ // Stop scripts or inline event handlers from being executed immediately\n// by using document.implementation\nif(support.createHTMLDocument){context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n// so any parsed elements with URLs\n// are based on the document's URL (gh-2965)\nbase = context.createElement(\"base\");base.href = document.location.href;context.head.appendChild(base);}else {context = document;}}parsed = rsingleTag.exec(data);scripts = !keepScripts && []; // Single tag\nif(parsed){return [context.createElement(parsed[1])];}parsed = buildFragment([data],context,scripts);if(scripts && scripts.length){jQuery(scripts).remove();}return jQuery.merge([],parsed.childNodes);};jQuery.offset = {setOffset:function setOffset(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,\"position\"),curElem=jQuery(elem),props={}; // Set position first, in-case top/left are set even on static elem\nif(position === \"static\"){elem.style.position = \"relative\";}curOffset = curElem.offset();curCSSTop = jQuery.css(elem,\"top\");curCSSLeft = jQuery.css(elem,\"left\");calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n// top or left is auto and position is either absolute or fixed\nif(calculatePosition){curPosition = curElem.position();curTop = curPosition.top;curLeft = curPosition.left;}else {curTop = parseFloat(curCSSTop) || 0;curLeft = parseFloat(curCSSLeft) || 0;}if(jQuery.isFunction(options)){ // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\noptions = options.call(elem,i,jQuery.extend({},curOffset));}if(options.top != null){props.top = options.top - curOffset.top + curTop;}if(options.left != null){props.left = options.left - curOffset.left + curLeft;}if(\"using\" in options){options.using.call(elem,props);}else {curElem.css(props);}}};jQuery.fn.extend({offset:function offset(options){ // Preserve chaining for setter\nif(arguments.length){return options === undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i);});}var doc,docElem,rect,win,elem=this[0];if(!elem){return;} // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n// Support: IE <=11 only\n// Running getBoundingClientRect on a\n// disconnected node in IE throws an error\nif(!elem.getClientRects().length){return {top:0,left:0};}rect = elem.getBoundingClientRect();doc = elem.ownerDocument;docElem = doc.documentElement;win = doc.defaultView;return {top:rect.top + win.pageYOffset - docElem.clientTop,left:rect.left + win.pageXOffset - docElem.clientLeft};},position:function position(){if(!this[0]){return;}var offsetParent,offset,elem=this[0],parentOffset={top:0,left:0}; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n// because it is its only offset parent\nif(jQuery.css(elem,\"position\") === \"fixed\"){ // Assume getBoundingClientRect is there when computed position is fixed\noffset = elem.getBoundingClientRect();}else { // Get *real* offsetParent\noffsetParent = this.offsetParent(); // Get correct offsets\noffset = this.offset();if(!nodeName(offsetParent[0],\"html\")){parentOffset = offsetParent.offset();} // Add offsetParent borders\nparentOffset = {top:parentOffset.top + jQuery.css(offsetParent[0],\"borderTopWidth\",true),left:parentOffset.left + jQuery.css(offsetParent[0],\"borderLeftWidth\",true)};} // Subtract parent offsets and element margins\nreturn {top:offset.top - parentOffset.top - jQuery.css(elem,\"marginTop\",true),left:offset.left - parentOffset.left - jQuery.css(elem,\"marginLeft\",true)};}, // This method will return documentElement in the following cases:\n// 1) For the element inside the iframe without offsetParent, this method will return\n//    documentElement of the parent window\n// 2) For the hidden or detached element\n// 3) For body or html element, i.e. in case of the html node - it will return itself\n//\n// but those exceptions were never presented as a real life use-cases\n// and might be considered as more preferable results.\n//\n// This logic, however, is not guaranteed and can change at any point in the future\noffsetParent:function offsetParent(){return this.map(function(){var offsetParent=this.offsetParent;while(offsetParent && jQuery.css(offsetParent,\"position\") === \"static\") {offsetParent = offsetParent.offsetParent;}return offsetParent || documentElement;});}}); // Create scrollLeft and scrollTop methods\njQuery.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(method,prop){var top=\"pageYOffset\" === prop;jQuery.fn[method] = function(val){return access(this,function(elem,method,val){ // Coalesce documents and windows\nvar win;if(jQuery.isWindow(elem)){win = elem;}else if(elem.nodeType === 9){win = elem.defaultView;}if(val === undefined){return win?win[prop]:elem[method];}if(win){win.scrollTo(!top?val:win.pageXOffset,top?val:win.pageYOffset);}else {elem[method] = val;}},method,val,arguments.length);};}); // Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each([\"top\",\"left\"],function(i,prop){jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed = curCSS(elem,prop); // If curCSS returns percentage, fallback to offset\nreturn rnumnonpx.test(computed)?jQuery(elem).position()[prop] + \"px\":computed;}});}); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each({Height:\"height\",Width:\"width\"},function(name,type){jQuery.each({padding:\"inner\" + name,content:type,\"\":\"outer\" + name},function(defaultExtra,funcName){ // Margin is only for outerHeight, outerWidth\njQuery.fn[funcName] = function(margin,value){var chainable=arguments.length && (defaultExtra || typeof margin !== \"boolean\"),extra=defaultExtra || (margin === true || value === true?\"margin\":\"border\");return access(this,function(elem,type,value){var doc;if(jQuery.isWindow(elem)){ // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\nreturn funcName.indexOf(\"outer\") === 0?elem[\"inner\" + name]:elem.document.documentElement[\"client\" + name];} // Get document width or height\nif(elem.nodeType === 9){doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n// whichever is greatest\nreturn Math.max(elem.body[\"scroll\" + name],doc[\"scroll\" + name],elem.body[\"offset\" + name],doc[\"offset\" + name],doc[\"client\" + name]);}return value === undefined? // Get width or height on the element, requesting but not forcing parseFloat\njQuery.css(elem,type,extra): // Set width or height on the element\njQuery.style(elem,type,value,extra);},type,chainable?margin:undefined,chainable);};});});jQuery.fn.extend({bind:function bind(types,data,fn){return this.on(types,null,data,fn);},unbind:function unbind(types,fn){return this.off(types,null,fn);},delegate:function delegate(selector,types,data,fn){return this.on(types,selector,data,fn);},undelegate:function undelegate(selector,types,fn){ // ( namespace ) or ( selector, types [, fn] )\nreturn arguments.length === 1?this.off(selector,\"**\"):this.off(types,selector || \"**\",fn);}});jQuery.holdReady = function(hold){if(hold){jQuery.readyWait++;}else {jQuery.ready(true);}};jQuery.isArray = Array.isArray;jQuery.parseJSON = JSON.parse;jQuery.nodeName = nodeName; // Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\nif(typeof define === \"function\" && define.amd){define(\"jquery\",[],function(){return jQuery;});}var  // Map over jQuery in case of overwrite\n_jQuery=window.jQuery, // Map over the $ in case of overwrite\n_$=window.$;jQuery.noConflict = function(deep){if(window.$ === jQuery){window.$ = _$;}if(deep && window.jQuery === jQuery){window.jQuery = _jQuery;}return jQuery;}; // Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif(!noGlobal){window.jQuery = window.$ = jQuery;}return jQuery;}); // Otherwise append directly","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\"use strict\";\n\nif (\"undefined\" == typeof jQuery) throw new Error(\"Bootstrap's JavaScript requires jQuery\");+(function (a) {\n  \"use strict\";var b = a.fn.jquery.split(\" \")[0].split(\".\");if (b[0] < 2 && b[1] < 9 || 1 == b[0] && 9 == b[1] && b[2] < 1 || b[0] > 3) throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\");\n})(jQuery), +(function (a) {\n  \"use strict\";function b() {\n    var a = document.createElement(\"bootstrap\"),\n        b = { WebkitTransition: \"webkitTransitionEnd\", MozTransition: \"transitionend\", OTransition: \"oTransitionEnd otransitionend\", transition: \"transitionend\" };for (var c in b) if (void 0 !== a.style[c]) return { end: b[c] };return !1;\n  }a.fn.emulateTransitionEnd = function (b) {\n    var c = !1,\n        d = this;a(this).one(\"bsTransitionEnd\", function () {\n      c = !0;\n    });var e = function e() {\n      c || a(d).trigger(a.support.transition.end);\n    };return setTimeout(e, b), this;\n  }, a(function () {\n    a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = { bindType: a.support.transition.end, delegateType: a.support.transition.end, handle: function handle(b) {\n        if (a(b.target).is(this)) return b.handleObj.handler.apply(this, arguments);\n      } });\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var c = a(this),\n          e = c.data(\"bs.alert\");e || c.data(\"bs.alert\", e = new d(this)), \"string\" == typeof b && e[b].call(c);\n    });\n  }var c = '[data-dismiss=\"alert\"]',\n      d = function d(b) {\n    a(b).on(\"click\", c, this.close);\n  };d.VERSION = \"3.3.7\", d.TRANSITION_DURATION = 150, d.prototype.close = function (b) {\n    function c() {\n      g.detach().trigger(\"closed.bs.alert\").remove();\n    }var e = a(this),\n        f = e.attr(\"data-target\");f || (f = e.attr(\"href\"), f = f && f.replace(/.*(?=#[^\\s]*$)/, \"\"));var g = a(\"#\" === f ? [] : f);b && b.preventDefault(), g.length || (g = e.closest(\".alert\")), g.trigger(b = a.Event(\"close.bs.alert\")), b.isDefaultPrevented() || (g.removeClass(\"in\"), a.support.transition && g.hasClass(\"fade\") ? g.one(\"bsTransitionEnd\", c).emulateTransitionEnd(d.TRANSITION_DURATION) : c());\n  };var e = a.fn.alert;a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function () {\n    return a.fn.alert = e, this;\n  }, a(document).on(\"click.bs.alert.data-api\", c, d.prototype.close);\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.button\"),\n          f = \"object\" == typeof b && b;e || d.data(\"bs.button\", e = new c(this, f)), \"toggle\" == b ? e.toggle() : b && e.setState(b);\n    });\n  }var c = function c(b, d) {\n    this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1;\n  };c.VERSION = \"3.3.7\", c.DEFAULTS = { loadingText: \"loading...\" }, c.prototype.setState = function (b) {\n    var c = \"disabled\",\n        d = this.$element,\n        e = d.is(\"input\") ? \"val\" : \"html\",\n        f = d.data();b += \"Text\", null == f.resetText && d.data(\"resetText\", d[e]()), setTimeout(a.proxy(function () {\n      d[e](null == f[b] ? this.options[b] : f[b]), \"loadingText\" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c).prop(c, !0)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c).prop(c, !1));\n    }, this), 0);\n  }, c.prototype.toggle = function () {\n    var a = !0,\n        b = this.$element.closest('[data-toggle=\"buttons\"]');if (b.length) {\n      var c = this.$element.find(\"input\");\"radio\" == c.prop(\"type\") ? (c.prop(\"checked\") && (a = !1), b.find(\".active\").removeClass(\"active\"), this.$element.addClass(\"active\")) : \"checkbox\" == c.prop(\"type\") && (c.prop(\"checked\") !== this.$element.hasClass(\"active\") && (a = !1), this.$element.toggleClass(\"active\")), c.prop(\"checked\", this.$element.hasClass(\"active\")), a && c.trigger(\"change\");\n    } else this.$element.attr(\"aria-pressed\", !this.$element.hasClass(\"active\")), this.$element.toggleClass(\"active\");\n  };var d = a.fn.button;a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function () {\n    return a.fn.button = d, this;\n  }, a(document).on(\"click.bs.button.data-api\", '[data-toggle^=\"button\"]', function (c) {\n    var d = a(c.target).closest(\".btn\");b.call(d, \"toggle\"), a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]') || (c.preventDefault(), d.is(\"input,button\") ? d.trigger(\"focus\") : d.find(\"input:visible,button:visible\").first().trigger(\"focus\"));\n  }).on(\"focus.bs.button.data-api blur.bs.button.data-api\", '[data-toggle^=\"button\"]', function (b) {\n    a(b.target).closest(\".btn\").toggleClass(\"focus\", /^focus(in)?$/.test(b.type));\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.carousel\"),\n          f = a.extend({}, c.DEFAULTS, d.data(), \"object\" == typeof b && b),\n          g = \"string\" == typeof b ? b : f.slide;e || d.data(\"bs.carousel\", e = new c(this, f)), \"number\" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle();\n    });\n  }var c = function c(b, _c) {\n    this.$element = a(b), this.$indicators = this.$element.find(\".carousel-indicators\"), this.options = _c, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on(\"keydown.bs.carousel\", a.proxy(this.keydown, this)), \"hover\" == this.options.pause && !(\"ontouchstart\" in document.documentElement) && this.$element.on(\"mouseenter.bs.carousel\", a.proxy(this.pause, this)).on(\"mouseleave.bs.carousel\", a.proxy(this.cycle, this));\n  };c.VERSION = \"3.3.7\", c.TRANSITION_DURATION = 600, c.DEFAULTS = { interval: 5e3, pause: \"hover\", wrap: !0, keyboard: !0 }, c.prototype.keydown = function (a) {\n    if (!/input|textarea/i.test(a.target.tagName)) {\n      switch (a.which) {case 37:\n          this.prev();break;case 39:\n          this.next();break;default:\n          return;}a.preventDefault();\n    }\n  }, c.prototype.cycle = function (b) {\n    return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this;\n  }, c.prototype.getItemIndex = function (a) {\n    return this.$items = a.parent().children(\".item\"), this.$items.index(a || this.$active);\n  }, c.prototype.getItemForDirection = function (a, b) {\n    var c = this.getItemIndex(b),\n        d = \"prev\" == a && 0 === c || \"next\" == a && c == this.$items.length - 1;if (d && !this.options.wrap) return b;var e = \"prev\" == a ? -1 : 1,\n        f = (c + e) % this.$items.length;return this.$items.eq(f);\n  }, c.prototype.to = function (a) {\n    var b = this,\n        c = this.getItemIndex(this.$active = this.$element.find(\".item.active\"));if (!(a > this.$items.length - 1 || a < 0)) return this.sliding ? this.$element.one(\"slid.bs.carousel\", function () {\n      b.to(a);\n    }) : c == a ? this.pause().cycle() : this.slide(a > c ? \"next\" : \"prev\", this.$items.eq(a));\n  }, c.prototype.pause = function (b) {\n    return b || (this.paused = !0), this.$element.find(\".next, .prev\").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this;\n  }, c.prototype.next = function () {\n    if (!this.sliding) return this.slide(\"next\");\n  }, c.prototype.prev = function () {\n    if (!this.sliding) return this.slide(\"prev\");\n  }, c.prototype.slide = function (b, d) {\n    var e = this.$element.find(\".item.active\"),\n        f = d || this.getItemForDirection(b, e),\n        g = this.interval,\n        h = \"next\" == b ? \"left\" : \"right\",\n        i = this;if (f.hasClass(\"active\")) return this.sliding = !1;var j = f[0],\n        k = a.Event(\"slide.bs.carousel\", { relatedTarget: j, direction: h });if ((this.$element.trigger(k), !k.isDefaultPrevented())) {\n      if ((this.sliding = !0, g && this.pause(), this.$indicators.length)) {\n        this.$indicators.find(\".active\").removeClass(\"active\");var l = a(this.$indicators.children()[this.getItemIndex(f)]);l && l.addClass(\"active\");\n      }var m = a.Event(\"slid.bs.carousel\", { relatedTarget: j, direction: h });return a.support.transition && this.$element.hasClass(\"slide\") ? (f.addClass(b), f[0].offsetWidth, e.addClass(h), f.addClass(h), e.one(\"bsTransitionEnd\", function () {\n        f.removeClass([b, h].join(\" \")).addClass(\"active\"), e.removeClass([\"active\", h].join(\" \")), i.sliding = !1, setTimeout(function () {\n          i.$element.trigger(m);\n        }, 0);\n      }).emulateTransitionEnd(c.TRANSITION_DURATION)) : (e.removeClass(\"active\"), f.addClass(\"active\"), this.sliding = !1, this.$element.trigger(m)), g && this.cycle(), this;\n    }\n  };var d = a.fn.carousel;a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function () {\n    return a.fn.carousel = d, this;\n  };var e = function e(c) {\n    var d,\n        e = a(this),\n        f = a(e.attr(\"data-target\") || (d = e.attr(\"href\")) && d.replace(/.*(?=#[^\\s]+$)/, \"\"));if (f.hasClass(\"carousel\")) {\n      var g = a.extend({}, f.data(), e.data()),\n          h = e.attr(\"data-slide-to\");h && (g.interval = !1), b.call(f, g), h && f.data(\"bs.carousel\").to(h), c.preventDefault();\n    }\n  };a(document).on(\"click.bs.carousel.data-api\", \"[data-slide]\", e).on(\"click.bs.carousel.data-api\", \"[data-slide-to]\", e), a(window).on(\"load\", function () {\n    a('[data-ride=\"carousel\"]').each(function () {\n      var c = a(this);b.call(c, c.data());\n    });\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    var c,\n        d = b.attr(\"data-target\") || (c = b.attr(\"href\")) && c.replace(/.*(?=#[^\\s]+$)/, \"\");return a(d);\n  }function c(b) {\n    return this.each(function () {\n      var c = a(this),\n          e = c.data(\"bs.collapse\"),\n          f = a.extend({}, d.DEFAULTS, c.data(), \"object\" == typeof b && b);!e && f.toggle && /show|hide/.test(b) && (f.toggle = !1), e || c.data(\"bs.collapse\", e = new d(this, f)), \"string\" == typeof b && e[b]();\n    });\n  }var d = function d(b, c) {\n    this.$element = a(b), this.options = a.extend({}, d.DEFAULTS, c), this.$trigger = a('[data-toggle=\"collapse\"][href=\"#' + b.id + '\"],[data-toggle=\"collapse\"][data-target=\"#' + b.id + '\"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle();\n  };d.VERSION = \"3.3.7\", d.TRANSITION_DURATION = 350, d.DEFAULTS = { toggle: !0 }, d.prototype.dimension = function () {\n    var a = this.$element.hasClass(\"width\");return a ? \"width\" : \"height\";\n  }, d.prototype.show = function () {\n    if (!this.transitioning && !this.$element.hasClass(\"in\")) {\n      var b,\n          e = this.$parent && this.$parent.children(\".panel\").children(\".in, .collapsing\");if (!(e && e.length && (b = e.data(\"bs.collapse\"), b && b.transitioning))) {\n        var f = a.Event(\"show.bs.collapse\");if ((this.$element.trigger(f), !f.isDefaultPrevented())) {\n          e && e.length && (c.call(e, \"hide\"), b || e.data(\"bs.collapse\", null));var g = this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\", !0), this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\", !0), this.transitioning = 1;var h = function h() {\n            this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"), this.transitioning = 0, this.$element.trigger(\"shown.bs.collapse\");\n          };if (!a.support.transition) return h.call(this);var i = a.camelCase([\"scroll\", g].join(\"-\"));this.$element.one(\"bsTransitionEnd\", a.proxy(h, this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i]);\n        }\n      }\n    }\n  }, d.prototype.hide = function () {\n    if (!this.transitioning && this.$element.hasClass(\"in\")) {\n      var b = a.Event(\"hide.bs.collapse\");if ((this.$element.trigger(b), !b.isDefaultPrevented())) {\n        var c = this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\", !1), this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\", !1), this.transitioning = 1;var e = function e() {\n          this.transitioning = 0, this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\");\n        };return a.support.transition ? void this.$element[c](0).one(\"bsTransitionEnd\", a.proxy(e, this)).emulateTransitionEnd(d.TRANSITION_DURATION) : e.call(this);\n      }\n    }\n  }, d.prototype.toggle = function () {\n    this[this.$element.hasClass(\"in\") ? \"hide\" : \"show\"]();\n  }, d.prototype.getParent = function () {\n    return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]').each(a.proxy(function (c, d) {\n      var e = a(d);this.addAriaAndCollapsedClass(b(e), e);\n    }, this)).end();\n  }, d.prototype.addAriaAndCollapsedClass = function (a, b) {\n    var c = a.hasClass(\"in\");a.attr(\"aria-expanded\", c), b.toggleClass(\"collapsed\", !c).attr(\"aria-expanded\", c);\n  };var e = a.fn.collapse;a.fn.collapse = c, a.fn.collapse.Constructor = d, a.fn.collapse.noConflict = function () {\n    return a.fn.collapse = e, this;\n  }, a(document).on(\"click.bs.collapse.data-api\", '[data-toggle=\"collapse\"]', function (d) {\n    var e = a(this);e.attr(\"data-target\") || d.preventDefault();var f = b(e),\n        g = f.data(\"bs.collapse\"),\n        h = g ? \"toggle\" : e.data();c.call(f, h);\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    var c = b.attr(\"data-target\");c || (c = b.attr(\"href\"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\\s]*$)/, \"\"));var d = c && a(c);return d && d.length ? d : b.parent();\n  }function c(c) {\n    c && 3 === c.which || (a(e).remove(), a(f).each(function () {\n      var d = a(this),\n          e = b(d),\n          f = { relatedTarget: this };e.hasClass(\"open\") && (c && \"click\" == c.type && /input|textarea/i.test(c.target.tagName) && a.contains(e[0], c.target) || (e.trigger(c = a.Event(\"hide.bs.dropdown\", f)), c.isDefaultPrevented() || (d.attr(\"aria-expanded\", \"false\"), e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\", f)))));\n    }));\n  }function d(b) {\n    return this.each(function () {\n      var c = a(this),\n          d = c.data(\"bs.dropdown\");d || c.data(\"bs.dropdown\", d = new g(this)), \"string\" == typeof b && d[b].call(c);\n    });\n  }var e = \".dropdown-backdrop\",\n      f = '[data-toggle=\"dropdown\"]',\n      g = function g(b) {\n    a(b).on(\"click.bs.dropdown\", this.toggle);\n  };g.VERSION = \"3.3.7\", g.prototype.toggle = function (d) {\n    var e = a(this);if (!e.is(\".disabled, :disabled\")) {\n      var f = b(e),\n          g = f.hasClass(\"open\");if ((c(), !g)) {\n        \"ontouchstart\" in document.documentElement && !f.closest(\".navbar-nav\").length && a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\", c);var h = { relatedTarget: this };if ((f.trigger(d = a.Event(\"show.bs.dropdown\", h)), d.isDefaultPrevented())) return;e.trigger(\"focus\").attr(\"aria-expanded\", \"true\"), f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\", h));\n      }return !1;\n    }\n  }, g.prototype.keydown = function (c) {\n    if (/(38|40|27|32)/.test(c.which) && !/input|textarea/i.test(c.target.tagName)) {\n      var d = a(this);if ((c.preventDefault(), c.stopPropagation(), !d.is(\".disabled, :disabled\"))) {\n        var e = b(d),\n            g = e.hasClass(\"open\");if (!g && 27 != c.which || g && 27 == c.which) return 27 == c.which && e.find(f).trigger(\"focus\"), d.trigger(\"click\");var h = \" li:not(.disabled):visible a\",\n            i = e.find(\".dropdown-menu\" + h);if (i.length) {\n          var j = i.index(c.target);38 == c.which && j > 0 && j--, 40 == c.which && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger(\"focus\");\n        }\n      }\n    }\n  };var h = a.fn.dropdown;a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function () {\n    return a.fn.dropdown = h, this;\n  }, a(document).on(\"click.bs.dropdown.data-api\", c).on(\"click.bs.dropdown.data-api\", \".dropdown form\", function (a) {\n    a.stopPropagation();\n  }).on(\"click.bs.dropdown.data-api\", f, g.prototype.toggle).on(\"keydown.bs.dropdown.data-api\", f, g.prototype.keydown).on(\"keydown.bs.dropdown.data-api\", \".dropdown-menu\", g.prototype.keydown);\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b, d) {\n    return this.each(function () {\n      var e = a(this),\n          f = e.data(\"bs.modal\"),\n          g = a.extend({}, c.DEFAULTS, e.data(), \"object\" == typeof b && b);f || e.data(\"bs.modal\", f = new c(this, g)), \"string\" == typeof b ? f[b](d) : g.show && f.show(d);\n    });\n  }var c = function c(b, _c2) {\n    this.options = _c2, this.$body = a(document.body), this.$element = a(b), this.$dialog = this.$element.find(\".modal-dialog\"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(\".modal-content\").load(this.options.remote, a.proxy(function () {\n      this.$element.trigger(\"loaded.bs.modal\");\n    }, this));\n  };c.VERSION = \"3.3.7\", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = { backdrop: !0, keyboard: !0, show: !0 }, c.prototype.toggle = function (a) {\n    return this.isShown ? this.hide() : this.show(a);\n  }, c.prototype.show = function (b) {\n    var d = this,\n        e = a.Event(\"show.bs.modal\", { relatedTarget: b });this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass(\"modal-open\"), this.escape(), this.resize(), this.$element.on(\"click.dismiss.bs.modal\", '[data-dismiss=\"modal\"]', a.proxy(this.hide, this)), this.$dialog.on(\"mousedown.dismiss.bs.modal\", function () {\n      d.$element.one(\"mouseup.dismiss.bs.modal\", function (b) {\n        a(b.target).is(d.$element) && (d.ignoreBackdropClick = !0);\n      });\n    }), this.backdrop(function () {\n      var e = a.support.transition && d.$element.hasClass(\"fade\");d.$element.parent().length || d.$element.appendTo(d.$body), d.$element.show().scrollTop(0), d.adjustDialog(), e && d.$element[0].offsetWidth, d.$element.addClass(\"in\"), d.enforceFocus();var f = a.Event(\"shown.bs.modal\", { relatedTarget: b });e ? d.$dialog.one(\"bsTransitionEnd\", function () {\n        d.$element.trigger(\"focus\").trigger(f);\n      }).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger(\"focus\").trigger(f);\n    }));\n  }, c.prototype.hide = function (b) {\n    b && b.preventDefault(), b = a.Event(\"hide.bs.modal\"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), a(document).off(\"focusin.bs.modal\"), this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"), this.$dialog.off(\"mousedown.dismiss.bs.modal\"), a.support.transition && this.$element.hasClass(\"fade\") ? this.$element.one(\"bsTransitionEnd\", a.proxy(this.hideModal, this)).emulateTransitionEnd(c.TRANSITION_DURATION) : this.hideModal());\n  }, c.prototype.enforceFocus = function () {\n    a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\", a.proxy(function (a) {\n      document === a.target || this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger(\"focus\");\n    }, this));\n  }, c.prototype.escape = function () {\n    this.isShown && this.options.keyboard ? this.$element.on(\"keydown.dismiss.bs.modal\", a.proxy(function (a) {\n      27 == a.which && this.hide();\n    }, this)) : this.isShown || this.$element.off(\"keydown.dismiss.bs.modal\");\n  }, c.prototype.resize = function () {\n    this.isShown ? a(window).on(\"resize.bs.modal\", a.proxy(this.handleUpdate, this)) : a(window).off(\"resize.bs.modal\");\n  }, c.prototype.hideModal = function () {\n    var a = this;this.$element.hide(), this.backdrop(function () {\n      a.$body.removeClass(\"modal-open\"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger(\"hidden.bs.modal\");\n    });\n  }, c.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove(), this.$backdrop = null;\n  }, c.prototype.backdrop = function (b) {\n    var d = this,\n        e = this.$element.hasClass(\"fade\") ? \"fade\" : \"\";if (this.isShown && this.options.backdrop) {\n      var f = a.support.transition && e;if ((this.$backdrop = a(document.createElement(\"div\")).addClass(\"modal-backdrop \" + e).appendTo(this.$body), this.$element.on(\"click.dismiss.bs.modal\", a.proxy(function (a) {\n        return this.ignoreBackdropClick ? void (this.ignoreBackdropClick = !1) : void (a.target === a.currentTarget && (\"static\" == this.options.backdrop ? this.$element[0].focus() : this.hide()));\n      }, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass(\"in\"), !b)) return;f ? this.$backdrop.one(\"bsTransitionEnd\", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b();\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass(\"in\");var g = function g() {\n        d.removeBackdrop(), b && b();\n      };a.support.transition && this.$element.hasClass(\"fade\") ? this.$backdrop.one(\"bsTransitionEnd\", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g();\n    } else b && b();\n  }, c.prototype.handleUpdate = function () {\n    this.adjustDialog();\n  }, c.prototype.adjustDialog = function () {\n    var a = this.$element[0].scrollHeight > document.documentElement.clientHeight;this.$element.css({ paddingLeft: !this.bodyIsOverflowing && a ? this.scrollbarWidth : \"\", paddingRight: this.bodyIsOverflowing && !a ? this.scrollbarWidth : \"\" });\n  }, c.prototype.resetAdjustments = function () {\n    this.$element.css({ paddingLeft: \"\", paddingRight: \"\" });\n  }, c.prototype.checkScrollbar = function () {\n    var a = window.innerWidth;if (!a) {\n      var b = document.documentElement.getBoundingClientRect();a = b.right - Math.abs(b.left);\n    }this.bodyIsOverflowing = document.body.clientWidth < a, this.scrollbarWidth = this.measureScrollbar();\n  }, c.prototype.setScrollbar = function () {\n    var a = parseInt(this.$body.css(\"padding-right\") || 0, 10);this.originalBodyPad = document.body.style.paddingRight || \"\", this.bodyIsOverflowing && this.$body.css(\"padding-right\", a + this.scrollbarWidth);\n  }, c.prototype.resetScrollbar = function () {\n    this.$body.css(\"padding-right\", this.originalBodyPad);\n  }, c.prototype.measureScrollbar = function () {\n    var a = document.createElement(\"div\");a.className = \"modal-scrollbar-measure\", this.$body.append(a);var b = a.offsetWidth - a.clientWidth;return this.$body[0].removeChild(a), b;\n  };var d = a.fn.modal;a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function () {\n    return a.fn.modal = d, this;\n  }, a(document).on(\"click.bs.modal.data-api\", '[data-toggle=\"modal\"]', function (c) {\n    var d = a(this),\n        e = d.attr(\"href\"),\n        f = a(d.attr(\"data-target\") || e && e.replace(/.*(?=#[^\\s]+$)/, \"\")),\n        g = f.data(\"bs.modal\") ? \"toggle\" : a.extend({ remote: !/#/.test(e) && e }, f.data(), d.data());d.is(\"a\") && c.preventDefault(), f.one(\"show.bs.modal\", function (a) {\n      a.isDefaultPrevented() || f.one(\"hidden.bs.modal\", function () {\n        d.is(\":visible\") && d.trigger(\"focus\");\n      });\n    }), b.call(f, g, this);\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.tooltip\"),\n          f = \"object\" == typeof b && b;!e && /destroy|hide/.test(b) || (e || d.data(\"bs.tooltip\", e = new c(this, f)), \"string\" == typeof b && e[b]());\n    });\n  }var c = function c(a, b) {\n    this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init(\"tooltip\", a, b);\n  };c.VERSION = \"3.3.7\", c.TRANSITION_DURATION = 150, c.DEFAULTS = { animation: !0, placement: \"top\", selector: !1, template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>', trigger: \"hover focus\", title: \"\", delay: 0, html: !1, container: !1, viewport: { selector: \"body\", padding: 0 } }, c.prototype.init = function (b, c, d) {\n    if ((this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d), this.$viewport = this.options.viewport && a(a.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = { click: !1, hover: !1, focus: !1 }, this.$element[0] instanceof document.constructor && !this.options.selector)) throw new Error(\"`selector` option must be specified when initializing \" + this.type + \" on the window.document object!\");for (var e = this.options.trigger.split(\" \"), f = e.length; f--;) {\n      var g = e[f];if (\"click\" == g) this.$element.on(\"click.\" + this.type, this.options.selector, a.proxy(this.toggle, this));else if (\"manual\" != g) {\n        var h = \"hover\" == g ? \"mouseenter\" : \"focusin\",\n            i = \"hover\" == g ? \"mouseleave\" : \"focusout\";this.$element.on(h + \".\" + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + \".\" + this.type, this.options.selector, a.proxy(this.leave, this));\n      }\n    }this.options.selector ? this._options = a.extend({}, this.options, { trigger: \"manual\", selector: \"\" }) : this.fixTitle();\n  }, c.prototype.getDefaults = function () {\n    return c.DEFAULTS;\n  }, c.prototype.getOptions = function (b) {\n    return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && \"number\" == typeof b.delay && (b.delay = { show: b.delay, hide: b.delay }), b;\n  }, c.prototype.getDelegateOptions = function () {\n    var b = {},\n        c = this.getDefaults();return this._options && a.each(this._options, function (a, d) {\n      c[a] != d && (b[a] = d);\n    }), b;\n  }, c.prototype.enter = function (b) {\n    var c = b instanceof this.constructor ? b : a(b.currentTarget).data(\"bs.\" + this.type);return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data(\"bs.\" + this.type, c)), b instanceof a.Event && (c.inState[\"focusin\" == b.type ? \"focus\" : \"hover\"] = !0), c.tip().hasClass(\"in\") || \"in\" == c.hoverState ? void (c.hoverState = \"in\") : (clearTimeout(c.timeout), c.hoverState = \"in\", c.options.delay && c.options.delay.show ? void (c.timeout = setTimeout(function () {\n      \"in\" == c.hoverState && c.show();\n    }, c.options.delay.show)) : c.show());\n  }, c.prototype.isInStateTrue = function () {\n    for (var a in this.inState) if (this.inState[a]) return !0;return !1;\n  }, c.prototype.leave = function (b) {\n    var c = b instanceof this.constructor ? b : a(b.currentTarget).data(\"bs.\" + this.type);if ((c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data(\"bs.\" + this.type, c)), b instanceof a.Event && (c.inState[\"focusout\" == b.type ? \"focus\" : \"hover\"] = !1), !c.isInStateTrue())) return clearTimeout(c.timeout), c.hoverState = \"out\", c.options.delay && c.options.delay.hide ? void (c.timeout = setTimeout(function () {\n      \"out\" == c.hoverState && c.hide();\n    }, c.options.delay.hide)) : c.hide();\n  }, c.prototype.show = function () {\n    var b = a.Event(\"show.bs.\" + this.type);if (this.hasContent() && this.enabled) {\n      this.$element.trigger(b);var d = a.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);if (b.isDefaultPrevented() || !d) return;var e = this,\n          f = this.tip(),\n          g = this.getUID(this.type);this.setContent(), f.attr(\"id\", g), this.$element.attr(\"aria-describedby\", g), this.options.animation && f.addClass(\"fade\");var h = \"function\" == typeof this.options.placement ? this.options.placement.call(this, f[0], this.$element[0]) : this.options.placement,\n          i = /\\s?auto?\\s?/i,\n          j = i.test(h);j && (h = h.replace(i, \"\") || \"top\"), f.detach().css({ top: 0, left: 0, display: \"block\" }).addClass(h).data(\"bs.\" + this.type, this), this.options.container ? f.appendTo(this.options.container) : f.insertAfter(this.$element), this.$element.trigger(\"inserted.bs.\" + this.type);var k = this.getPosition(),\n          l = f[0].offsetWidth,\n          m = f[0].offsetHeight;if (j) {\n        var n = h,\n            o = this.getPosition(this.$viewport);h = \"bottom\" == h && k.bottom + m > o.bottom ? \"top\" : \"top\" == h && k.top - m < o.top ? \"bottom\" : \"right\" == h && k.right + l > o.width ? \"left\" : \"left\" == h && k.left - l < o.left ? \"right\" : h, f.removeClass(n).addClass(h);\n      }var p = this.getCalculatedOffset(h, k, l, m);this.applyPlacement(p, h);var q = function q() {\n        var a = e.hoverState;e.$element.trigger(\"shown.bs.\" + e.type), e.hoverState = null, \"out\" == a && e.leave(e);\n      };a.support.transition && this.$tip.hasClass(\"fade\") ? f.one(\"bsTransitionEnd\", q).emulateTransitionEnd(c.TRANSITION_DURATION) : q();\n    }\n  }, c.prototype.applyPlacement = function (b, c) {\n    var d = this.tip(),\n        e = d[0].offsetWidth,\n        f = d[0].offsetHeight,\n        g = parseInt(d.css(\"margin-top\"), 10),\n        h = parseInt(d.css(\"margin-left\"), 10);isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top += g, b.left += h, a.offset.setOffset(d[0], a.extend({ using: function using(a) {\n        d.css({ top: Math.round(a.top), left: Math.round(a.left) });\n      } }, b), 0), d.addClass(\"in\");var i = d[0].offsetWidth,\n        j = d[0].offsetHeight;\"top\" == c && j != f && (b.top = b.top + f - j);var k = this.getViewportAdjustedDelta(c, b, i, j);k.left ? b.left += k.left : b.top += k.top;var l = /top|bottom/.test(c),\n        m = l ? 2 * k.left - e + i : 2 * k.top - f + j,\n        n = l ? \"offsetWidth\" : \"offsetHeight\";d.offset(b), this.replaceArrow(m, d[0][n], l);\n  }, c.prototype.replaceArrow = function (a, b, c) {\n    this.arrow().css(c ? \"left\" : \"top\", 50 * (1 - a / b) + \"%\").css(c ? \"top\" : \"left\", \"\");\n  }, c.prototype.setContent = function () {\n    var a = this.tip(),\n        b = this.getTitle();a.find(\".tooltip-inner\")[this.options.html ? \"html\" : \"text\"](b), a.removeClass(\"fade in top bottom left right\");\n  }, c.prototype.hide = function (b) {\n    function d() {\n      \"in\" != e.hoverState && f.detach(), e.$element && e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\" + e.type), b && b();\n    }var e = this,\n        f = a(this.$tip),\n        g = a.Event(\"hide.bs.\" + this.type);if ((this.$element.trigger(g), !g.isDefaultPrevented())) return f.removeClass(\"in\"), a.support.transition && f.hasClass(\"fade\") ? f.one(\"bsTransitionEnd\", d).emulateTransitionEnd(c.TRANSITION_DURATION) : d(), this.hoverState = null, this;\n  }, c.prototype.fixTitle = function () {\n    var a = this.$element;(a.attr(\"title\") || \"string\" != typeof a.attr(\"data-original-title\")) && a.attr(\"data-original-title\", a.attr(\"title\") || \"\").attr(\"title\", \"\");\n  }, c.prototype.hasContent = function () {\n    return this.getTitle();\n  }, c.prototype.getPosition = function (b) {\n    b = b || this.$element;var c = b[0],\n        d = \"BODY\" == c.tagName,\n        e = c.getBoundingClientRect();null == e.width && (e = a.extend({}, e, { width: e.right - e.left, height: e.bottom - e.top }));var f = window.SVGElement && c instanceof window.SVGElement,\n        g = d ? { top: 0, left: 0 } : f ? null : b.offset(),\n        h = { scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop() },\n        i = d ? { width: a(window).width(), height: a(window).height() } : null;return a.extend({}, e, h, i, g);\n  }, c.prototype.getCalculatedOffset = function (a, b, c, d) {\n    return \"bottom\" == a ? { top: b.top + b.height, left: b.left + b.width / 2 - c / 2 } : \"top\" == a ? { top: b.top - d, left: b.left + b.width / 2 - c / 2 } : \"left\" == a ? { top: b.top + b.height / 2 - d / 2, left: b.left - c } : { top: b.top + b.height / 2 - d / 2, left: b.left + b.width };\n  }, c.prototype.getViewportAdjustedDelta = function (a, b, c, d) {\n    var e = { top: 0, left: 0 };if (!this.$viewport) return e;var f = this.options.viewport && this.options.viewport.padding || 0,\n        g = this.getPosition(this.$viewport);if (/right|left/.test(a)) {\n      var h = b.top - f - g.scroll,\n          i = b.top + f - g.scroll + d;h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i);\n    } else {\n      var j = b.left - f,\n          k = b.left + f + c;j < g.left ? e.left = g.left - j : k > g.right && (e.left = g.left + g.width - k);\n    }return e;\n  }, c.prototype.getTitle = function () {\n    var a,\n        b = this.$element,\n        c = this.options;return a = b.attr(\"data-original-title\") || (\"function\" == typeof c.title ? c.title.call(b[0]) : c.title);\n  }, c.prototype.getUID = function (a) {\n    do a += ~ ~(1e6 * Math.random()); while (document.getElementById(a));return a;\n  }, c.prototype.tip = function () {\n    if (!this.$tip && (this.$tip = a(this.options.template), 1 != this.$tip.length)) throw new Error(this.type + \" `template` option must consist of exactly 1 top-level element!\");return this.$tip;\n  }, c.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find(\".tooltip-arrow\");\n  }, c.prototype.enable = function () {\n    this.enabled = !0;\n  }, c.prototype.disable = function () {\n    this.enabled = !1;\n  }, c.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled;\n  }, c.prototype.toggle = function (b) {\n    var c = this;b && (c = a(b.currentTarget).data(\"bs.\" + this.type), c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data(\"bs.\" + this.type, c))), b ? (c.inState.click = !c.inState.click, c.isInStateTrue() ? c.enter(c) : c.leave(c)) : c.tip().hasClass(\"in\") ? c.leave(c) : c.enter(c);\n  }, c.prototype.destroy = function () {\n    var a = this;clearTimeout(this.timeout), this.hide(function () {\n      a.$element.off(\".\" + a.type).removeData(\"bs.\" + a.type), a.$tip && a.$tip.detach(), a.$tip = null, a.$arrow = null, a.$viewport = null, a.$element = null;\n    });\n  };var d = a.fn.tooltip;a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function () {\n    return a.fn.tooltip = d, this;\n  };\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.popover\"),\n          f = \"object\" == typeof b && b;!e && /destroy|hide/.test(b) || (e || d.data(\"bs.popover\", e = new c(this, f)), \"string\" == typeof b && e[b]());\n    });\n  }var c = function c(a, b) {\n    this.init(\"popover\", a, b);\n  };if (!a.fn.tooltip) throw new Error(\"Popover requires tooltip.js\");c.VERSION = \"3.3.7\", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, { placement: \"right\", trigger: \"click\", content: \"\", template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>' }), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function () {\n    return c.DEFAULTS;\n  }, c.prototype.setContent = function () {\n    var a = this.tip(),\n        b = this.getTitle(),\n        c = this.getContent();a.find(\".popover-title\")[this.options.html ? \"html\" : \"text\"](b), a.find(\".popover-content\").children().detach().end()[this.options.html ? \"string\" == typeof c ? \"html\" : \"append\" : \"text\"](c), a.removeClass(\"fade top bottom left right in\"), a.find(\".popover-title\").html() || a.find(\".popover-title\").hide();\n  }, c.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent();\n  }, c.prototype.getContent = function () {\n    var a = this.$element,\n        b = this.options;return a.attr(\"data-content\") || (\"function\" == typeof b.content ? b.content.call(a[0]) : b.content);\n  }, c.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find(\".arrow\");\n  };var d = a.fn.popover;a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function () {\n    return a.fn.popover = d, this;\n  };\n})(jQuery), +(function (a) {\n  \"use strict\";function b(c, d) {\n    this.$body = a(document.body), this.$scrollElement = a(a(c).is(document.body) ? window : c), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || \"\") + \" .nav li > a\", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on(\"scroll.bs.scrollspy\", a.proxy(this.process, this)), this.refresh(), this.process();\n  }function c(c) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.scrollspy\"),\n          f = \"object\" == typeof c && c;e || d.data(\"bs.scrollspy\", e = new b(this, f)), \"string\" == typeof c && e[c]();\n    });\n  }b.VERSION = \"3.3.7\", b.DEFAULTS = { offset: 10 }, b.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight);\n  }, b.prototype.refresh = function () {\n    var b = this,\n        c = \"offset\",\n        d = 0;this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight(), a.isWindow(this.$scrollElement[0]) || (c = \"position\", d = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function () {\n      var b = a(this),\n          e = b.data(\"target\") || b.attr(\"href\"),\n          f = /^#./.test(e) && a(e);return f && f.length && f.is(\":visible\") && [[f[c]().top + d, e]] || null;\n    }).sort(function (a, b) {\n      return a[0] - b[0];\n    }).each(function () {\n      b.offsets.push(this[0]), b.targets.push(this[1]);\n    });\n  }, b.prototype.process = function () {\n    var a,\n        b = this.$scrollElement.scrollTop() + this.options.offset,\n        c = this.getScrollHeight(),\n        d = this.options.offset + c - this.$scrollElement.height(),\n        e = this.offsets,\n        f = this.targets,\n        g = this.activeTarget;if ((this.scrollHeight != c && this.refresh(), b >= d)) return g != (a = f[f.length - 1]) && this.activate(a);if (g && b < e[0]) return this.activeTarget = null, this.clear();for (a = e.length; a--;) g != f[a] && b >= e[a] && (void 0 === e[a + 1] || b < e[a + 1]) && this.activate(f[a]);\n  }, b.prototype.activate = function (b) {\n    this.activeTarget = b, this.clear();var c = this.selector + '[data-target=\"' + b + '\"],' + this.selector + '[href=\"' + b + '\"]',\n        d = a(c).parents(\"li\").addClass(\"active\");d.parent(\".dropdown-menu\").length && (d = d.closest(\"li.dropdown\").addClass(\"active\")), d.trigger(\"activate.bs.scrollspy\");\n  }, b.prototype.clear = function () {\n    a(this.selector).parentsUntil(this.options.target, \".active\").removeClass(\"active\");\n  };var d = a.fn.scrollspy;a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () {\n    return a.fn.scrollspy = d, this;\n  }, a(window).on(\"load.bs.scrollspy.data-api\", function () {\n    a('[data-spy=\"scroll\"]').each(function () {\n      var b = a(this);c.call(b, b.data());\n    });\n  });\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.tab\");e || d.data(\"bs.tab\", e = new c(this)), \"string\" == typeof b && e[b]();\n    });\n  }var c = function c(b) {\n    this.element = a(b);\n  };c.VERSION = \"3.3.7\", c.TRANSITION_DURATION = 150, c.prototype.show = function () {\n    var b = this.element,\n        c = b.closest(\"ul:not(.dropdown-menu)\"),\n        d = b.data(\"target\");if ((d || (d = b.attr(\"href\"), d = d && d.replace(/.*(?=#[^\\s]*$)/, \"\")), !b.parent(\"li\").hasClass(\"active\"))) {\n      var e = c.find(\".active:last a\"),\n          f = a.Event(\"hide.bs.tab\", { relatedTarget: b[0] }),\n          g = a.Event(\"show.bs.tab\", { relatedTarget: e[0] });if ((e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented())) {\n        var h = a(d);this.activate(b.closest(\"li\"), c), this.activate(h, h.parent(), function () {\n          e.trigger({ type: \"hidden.bs.tab\", relatedTarget: b[0] }), b.trigger({ type: \"shown.bs.tab\", relatedTarget: e[0] });\n        });\n      }\n    }\n  }, c.prototype.activate = function (b, d, e) {\n    function f() {\n      g.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\", !1), b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\", !0), h ? (b[0].offsetWidth, b.addClass(\"in\")) : b.removeClass(\"fade\"), b.parent(\".dropdown-menu\").length && b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\", !0), e && e();\n    }var g = d.find(\"> .active\"),\n        h = e && a.support.transition && (g.length && g.hasClass(\"fade\") || !!d.find(\"> .fade\").length);g.length && h ? g.one(\"bsTransitionEnd\", f).emulateTransitionEnd(c.TRANSITION_DURATION) : f(), g.removeClass(\"in\");\n  };var d = a.fn.tab;a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function () {\n    return a.fn.tab = d, this;\n  };var e = function e(c) {\n    c.preventDefault(), b.call(a(this), \"show\");\n  };a(document).on(\"click.bs.tab.data-api\", '[data-toggle=\"tab\"]', e).on(\"click.bs.tab.data-api\", '[data-toggle=\"pill\"]', e);\n})(jQuery), +(function (a) {\n  \"use strict\";function b(b) {\n    return this.each(function () {\n      var d = a(this),\n          e = d.data(\"bs.affix\"),\n          f = \"object\" == typeof b && b;e || d.data(\"bs.affix\", e = new c(this, f)), \"string\" == typeof b && e[b]();\n    });\n  }var c = function c(b, d) {\n    this.options = a.extend({}, c.DEFAULTS, d), this.$target = a(this.options.target).on(\"scroll.bs.affix.data-api\", a.proxy(this.checkPosition, this)).on(\"click.bs.affix.data-api\", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(b), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition();\n  };c.VERSION = \"3.3.7\", c.RESET = \"affix affix-top affix-bottom\", c.DEFAULTS = { offset: 0, target: window }, c.prototype.getState = function (a, b, c, d) {\n    var e = this.$target.scrollTop(),\n        f = this.$element.offset(),\n        g = this.$target.height();if (null != c && \"top\" == this.affixed) return e < c && \"top\";if (\"bottom\" == this.affixed) return null != c ? !(e + this.unpin <= f.top) && \"bottom\" : !(e + g <= a - d) && \"bottom\";var h = null == this.affixed,\n        i = h ? e : f.top,\n        j = h ? g : b;return null != c && e <= c ? \"top\" : null != d && i + j >= a - d && \"bottom\";\n  }, c.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a = this.$target.scrollTop(),\n        b = this.$element.offset();return this.pinnedOffset = b.top - a;\n  }, c.prototype.checkPositionWithEventLoop = function () {\n    setTimeout(a.proxy(this.checkPosition, this), 1);\n  }, c.prototype.checkPosition = function () {\n    if (this.$element.is(\":visible\")) {\n      var b = this.$element.height(),\n          d = this.options.offset,\n          e = d.top,\n          f = d.bottom,\n          g = Math.max(a(document).height(), a(document.body).height());\"object\" != typeof d && (f = e = d), \"function\" == typeof e && (e = d.top(this.$element)), \"function\" == typeof f && (f = d.bottom(this.$element));var h = this.getState(g, b, e, f);if (this.affixed != h) {\n        null != this.unpin && this.$element.css(\"top\", \"\");var i = \"affix\" + (h ? \"-\" + h : \"\"),\n            j = a.Event(i + \".bs.affix\");if ((this.$element.trigger(j), j.isDefaultPrevented())) return;this.affixed = h, this.unpin = \"bottom\" == h ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\", \"affixed\") + \".bs.affix\");\n      }\"bottom\" == h && this.$element.offset({ top: g - b - f });\n    }\n  };var d = a.fn.affix;a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function () {\n    return a.fn.affix = d, this;\n  }, a(window).on(\"load\", function () {\n    a('[data-spy=\"affix\"]').each(function () {\n      var c = a(this),\n          d = c.data();d.offset = d.offset || {}, null != d.offsetBottom && (d.offset.bottom = d.offsetBottom), null != d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d);\n    });\n  });\n})(jQuery);"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;","file":"yogeeme.js"}