PageSourceSearch

https://cfcvc.pt/js/site.js?v=1662203211

js cfcvc.pt collected 2026-10-08 22:20:28 UTC 555,038 bytes, 17,837 lines download raw bytes

vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ "./
4resources/js/bootstrap.min.js":
5/*!***************************************!*\
6  !*** ./resources/js/bootstrap.min.js ***!
7  \***************************************/
8/***/ (() => {
9
10function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
11
12/*!
13 * Bootstrap v3.3.7 (http://getbootstrap.com)
14 * Copyright 2011-2016 Twitter, Inc.
15 * Licensed under the MIT license
16 */
17if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery");
18+function (a) {
19  "use strict";
20
21  var b = a.fn.jquery.split(" ")[0].split(".");
22  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");
23}(jQuery), +function (a) {
24  "use strict";
25
26  function b() {
27    var a = document.createElement("bootstrap"),
28        b = {
29      WebkitTransition: "webkitTransitionEnd",
30      MozTransition: "transitionend",
31      OTransition: "oTransitionEnd otransitionend",
32      transition: "transitionend"
33    };
34
35    for (var c in b) {
36      if (void 0 !== a.style[c]) return {
37        end: b[c]
38      };
39    }
40
41    return !1;
42  }
43
44  a.fn.emulateTransitionEnd = function (b) {
45    var c = !1,
46        d = this;
47    a(this).one("bsTransitionEnd", function () {
48      c = !0;
49    });
50
51    var e = function e() {
52      c || a(d).trigger(a.support.transition.end);
53    };
54
55    return setTimeout(e, b), this;
56  }, a(function () {
57    a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = {
58      bindType: a.support.transition.end,
59      delegateType: a.support.transition.end,
60      handle: function handle(b) {
61        if (a(b.target).is(this)) return b.handleObj.handler.apply(this, arguments);
62      }
63    });
64  });
65}(jQuery), +function (a) {
66  "use strict";
67
68  function b(b) {
69    return this.each(function () {
70      var c = a(this),
71          e = c.data("bs.alert");
72      e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c);
73    });
74  }
75
76  var c = '[data-dismiss="alert"]',
77      d = function d(b) {
78    a(b).on("click", c, this.close);
79  };
80
81  d.VERSION = "3.3.7", d.TRANSITION_DURATION = 150, d.prototype.close = function (b) {
82    function c() {
83      g.detach().trigger("closed.bs.alert").remove();
84    }
85
86    var e = a(this),
87        f = e.attr("data-target");
88    f || (f = e.attr("href"), f = f && f.replace(/.*(?=#[^\s]*$)/, ""));
89    var g = a("#" === f ? [] : f);
90    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());
91  };
92  var e = a.fn.alert;
93  a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function () {
94    return a.fn.alert = e, this;
95  }, a(document).on("click.bs.alert.data-api", c, d.prototype.close);
96}(jQuery), +function (a) {
97  "use strict";
98
99  function b(b) {
100    return this.each(function () {
101      var d = a(this),
102          e = d.data("bs.button"),
103          f = "object" == _typeof(b) && b;
104      e || d.data("bs.button", e = new c(this, f)), "toggle" == b ? e.toggle() : b && e.setState(b);
105    });
106  }
107
108  var c = function c(b, d) {
109    this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1;
110  };
111
112  c.VERSION = "3.3.7", c.DEFAULTS = {
113    loadingText: "loading..."
114  }, c.prototype.setState = function (b) {
115    var c = "disabled",
116        d = this.$element,
117        e = d.is("input") ? "val" : "html",
118        f = d.data();
119    b += "Text", null == f.resetText && d.data("resetText", d[e]()), setTimeout(a.proxy(function () {
120      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));
121    }, this), 0);
122  }, c.prototype.toggle = function () {
123    var a = !0,
124        b = this.$element.closest('[data-toggle="buttons"]');
125
126    if (b.length) {
127      var c = this.$element.find("input");
128      "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");
129    } else this.$element.attr("aria-pressed", !this.$element.hasClass("active")), this.$element.toggleClass("active");
130  };
131  var d = a.fn.button;
132  a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function () {
133    return a.fn.button = d, this;
134  }, a(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function (c) {
135    var d = a(c.target).closest(".btn");
136    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"));
137  }).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function (b) {
138    a(b.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(b.type));
139  });
140}(jQuery), +function (a) {
141  "use strict";
142
143  function b(b) {
144    return this.each(function () {
145      var d = a(this),
146          e = d.data("bs.carousel"),
147          f = a.extend({}, c.DEFAULTS, d.data(), "object" == _typeof(b) && b),
148          g = "string" == typeof b ? b : f.slide;
149      e || d.data("bs.carousel", e = new c(this, f)), "number" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle();
150    });
151  }
152
153  var c = function c(b, _c) {
154    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("key
154down.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));
155  };
156
157  c.VERSION = "3.3.7", c.TRANSITION_DURATION = 600, c.DEFAULTS = {
158    interval: 5e3,
159    pause: "hover",
160    wrap: !0,
161    keyboard: !0
162  }, c.prototype.keydown = function (a) {
163    if (!/input|textarea/i.test(a.target.tagName)) {
164      switch (a.which) {
165        case 37:
166          this.prev();
167          break;
168
169        case 39:
170          this.next();
171          break;
172
173        default:
174          return;
175      }
176
177      a.preventDefault();
178    }
179  }, c.prototype.cycle = function (b) {
180    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;
181  }, c.prototype.getItemIndex = function (a) {
182    return this.$items = a.parent().children(".item"), this.$items.index(a || this.$active);
183  }, c.prototype.getItemForDirection = function (a, b) {
184    var c = this.getItemIndex(b),
185        d = "prev" == a && 0 === c || "next" == a && c == this.$items.length - 1;
186    if (d && !this.options.wrap) return b;
187    var e = "prev" == a ? -1 : 1,
188        f = (c + e) % this.$items.length;
189    return this.$items.eq(f);
190  }, c.prototype.to = function (a) {
191    var b = this,
192        c = this.getItemIndex(this.$active = this.$element.find(".item.active"));
193    if (!(a > this.$items.length - 1 || a < 0)) return this.sliding ? this.$element.one("slid.bs.carousel", function () {
194      b.to(a);
195    }) : c == a ? this.pause().cycle() : this.slide(a > c ? "next" : "prev", this.$items.eq(a));
196  }, c.prototype.pause = function (b) {
197    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;
198  }, c.prototype.next = function () {
199    if (!this.sliding) return this.slide("next");
200  }, c.prototype.prev = function () {
201    if (!this.sliding) return this.slide("prev");
202  }, c.prototype.slide = function (b, d) {
203    var e = this.$element.find(".item.active"),
204        f = d || this.getItemForDirection(b, e),
205        g = this.interval,
206        h = "next" == b ? "left" : "right",
207        i = this;
208    if (f.hasClass("active")) return this.sliding = !1;
209    var j = f[0],
210        k = a.Event("slide.bs.carousel", {
211      relatedTarget: j,
212      direction: h
213    });
214
215    if (this.$element.trigger(k), !k.isDefaultPrevented()) {
216      if (this.sliding = !0, g && this.pause(), this.$indicators.length) {
217        this.$indicators.find(".active").removeClass("active");
218        var l = a(this.$indicators.children()[this.getItemIndex(f)]);
219        l && l.addClass("active");
220      }
221
222      var m = a.Event("slid.bs.carousel", {
223        relatedTarget: j,
224        direction: h
225      });
226      return a.support.transition && this.$element.hasClass("slide") ? (f.addClass(b), f[0].offsetWidth, e.addClass(h), f.addClass(h), e.one("bsTransitionEnd", function () {
227        f.removeClass([b, h].join(" ")).addClass("active"), e.removeClass(["active", h].join(" ")), i.sliding = !1, setTimeout(function () {
228          i.$element.trigger(m);
229        }, 0);
230      }).emulateTransitionEnd(c.TRANSITION_DURATION)) : (e.removeClass("active"), f.addClass("active"), this.sliding = !1, this.$element.trigger(m)), g && this.cycle(), this;
231    }
232  };
233  var d = a.fn.carousel;
234  a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function () {
235    return a.fn.carousel = d, this;
236  };
237
238  var e = function e(c) {
239    var d,
240        e = a(this),
241        f = a(e.attr("data-target") || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, ""));
242
243    if (f.hasClass("carousel")) {
244      var g = a.extend({}, f.data(), e.data()),
245          h = e.attr("data-slide-to");
246      h && (g.interval = !1), b.call(f, g), h && f.data("bs.carousel").to(h), c.preventDefault();
247    }
248  };
249
250  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 () {
251    a('[data-ride="carousel"]').each(function () {
252      var c = a(this);
253      b.call(c, c.data());
254    });
255  });
256}(jQuery), +function (a) {
257  "use strict";
258
259  function b(b) {
260    var c,
261        d = b.attr("data-target") || (c = b.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "");
262    return a(d);
263  }
264
265  function c(b) {
266    return this.each(function () {
267      var c = a(this),
268          e = c.data("bs.collapse"),
269          f = a.extend({}, d.DEFAULTS, c.data(), "object" == _typeof(b) && b);
270      !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]();
271    });
272  }
273
274  var d = function d(b, c) {
275    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();
276  };
277
278  d.VERSION = "3.3.7", d.TRANSITION_DURATION = 350, d.DEFAULTS = {
279    toggle: !0
280  }, d.prototype.dimension = function () {
281    var a = this.$element.hasClass("width");
282    return a ? "width" : "height";
283  }, d.prototype.show = function () {
284    if (!this.transitioning && !this.$element.hasClass("in")) {
285      var b,
286          e = this.$parent && this.$parent.children(".panel").children(".in, .collapsing");
287
288      if (!(e && e.length && (b = e.data("bs.collapse"), b && b.transitioning))) {
289        var f = a.Event("show.bs.collapse");
290
291        if (this.$element.trigger(f), !f.isDefaultPrevented()) {
292          e && e.length && (c.call(e, "hide"), b || e.data("bs.collapse", null));
293          var g = this.dimension();
294          this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
295
296          var h = function h() {
297            this.$element.removeClass("collapsing").addClass("collapse in")[g](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse");
298          };
299
300          if (!a.support.transition) return h.call(this);
301          var i = a.camelCase(["scroll", g].join("-"));
302          this.$element.one("bsTransitionEnd", a.proxy(h, this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i]);
303        }
304      }
305    }
306  }, d.prototype.hide = function () {
307    if (!this.transitioning && this.$element.hasClass("in")) {
308      var b = a.Event("hide.bs.collapse");
309
310      if (this.$element.trigger(b), !b.isDefaultPrevented()) {
311        var c = this.dimension();
312        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;
313
314        var e = function e() {
315          this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse");
316        };
317
318        return a.support.transition ? void this.$element[c](0).one("bsTransitionEnd", a.proxy(e, this)).emulateTransitionEnd(d.TRANSITION_DURATION) : e.call(this);
319      }
320    }
321  }, d.prototype.toggle = function () {
322    this[this.$element.hasClass("in") ? "hide" : "show"]();
323  }, d.prototype.getParent = function () {
324    return a(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(a.proxy(function (c, d) {
325      var e = a(d);
326      this.addAriaAndCollapsedClass(b(e), e);
327    }, this)).end();
328  }, d.prototype.addAriaAndCollapsedClass = function (a, b) {
329    var c = a.hasClass("in");
330    a.attr("aria-expanded", c), b.toggleClass("collapsed", !c).attr("aria-expanded", c);
331  };
332  var e = a.fn.collapse;
333  a.fn.collapse = c, a.fn.collapse.Constructor = d, a.fn.collapse.noConflict = function () {
334    return a.fn.collapse = e, this;
335  }, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function (d) {
336    var e = a(this);
337    e.attr("data-target") || d.preventDefault();
338    var f = b(e),
339        g = f.data("bs.collapse"),
340        h = g ? "toggle" : e.data();
341    c.call(f, h);
342  });
343}(jQuery), +function (a) {
344  "use strict";
345
346  function b(b) {
347    var c = b.attr("data-target");
348    c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
349    var d = c && a(c);
350    return d && d.length ? d : b.parent();
351  }
352
353  function c(c) {
354    c && 3 === c.which || (a(e).remove(), a(f).each(function () {
355      var d = a(this),
356          e = b(d),
357          f = {
358        relatedTarget: this
359      };
360      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)))));
361    }));
362  }
363
364  function d(b) {
365    return this.each(function () {
366      var c = a(this),
367          d = c.data("bs.dropdown");
368      d || c.data("bs.dropdown", d = new g(this)), "string" == typeof b && d[b].call(c);
369    });
370  }
371
372  var e = ".dropdown-backdrop",
373      f = '[data-toggle="dropdown"]',
374      g = function g(b) {
375    a(b).on("click.bs.dropdown", this.toggle);
376  };
377
378  g.VERSION = "3.3.7", g.prototype.toggle = function (d) {
379    var e = a(this);
380
381    if (!e.is(".disabled, :disabled")) {
382      var f = b(e),
383          g = f.hasClass("open");
384
385      if (c(), !g) {
386        "ontouchstart" in document.documentElement && !f.closest(".
386navbar-nav").length && a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click", c);
387        var h = {
388          relatedTarget: this
389        };
390        if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented()) return;
391        e.trigger("focus").attr("aria-expanded", "true"), f.toggleClass("open").trigger(a.Event("shown.bs.dropdown", h));
392      }
393
394      return !1;
395    }
396  }, g.prototype.keydown = function (c) {
397    if (/(38|40|27|32)/.test(c.which) && !/input|textarea/i.test(c.target.tagName)) {
398      var d = a(this);
399
400      if (c.preventDefault(), c.stopPropagation(), !d.is(".disabled, :disabled")) {
401        var e = b(d),
402            g = e.hasClass("open");
403        if (!g && 27 != c.which || g && 27 == c.which) return 27 == c.which && e.find(f).trigger("focus"), d.trigger("click");
404        var h = " li:not(.disabled):visible a",
405            i = e.find(".dropdown-menu" + h);
406
407        if (i.length) {
408          var j = i.index(c.target);
409          38 == c.which && j > 0 && j--, 40 == c.which && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus");
410        }
411      }
412    }
413  };
414  var h = a.fn.dropdown;
415  a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function () {
416    return a.fn.dropdown = h, this;
417  }, a(document).on("click.bs.dropdown.data-api", c).on("click.bs.dropdown.data-api", ".dropdown form", function (a) {
418    a.stopPropagation();
419  }).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);
420}(jQuery), +function (a) {
421  "use strict";
422
423  function b(b, d) {
424    return this.each(function () {
425      var e = a(this),
426          f = e.data("bs.modal"),
427          g = a.extend({}, c.DEFAULTS, e.data(), "object" == _typeof(b) && b);
428      f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d);
429    });
430  }
431
432  var c = function c(b, _c2) {
433    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 () {
434      this.$element.trigger("loaded.bs.modal");
435    }, this));
436  };
437
438  c.VERSION = "3.3.7", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = {
439    backdrop: !0,
440    keyboard: !0,
441    show: !0
442  }, c.prototype.toggle = function (a) {
443    return this.isShown ? this.hide() : this.show(a);
444  }, c.prototype.show = function (b) {
445    var d = this,
446        e = a.Event("show.bs.modal", {
447      relatedTarget: b
448    });
449    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 () {
450      d.$element.one("mouseup.dismiss.bs.modal", function (b) {
451        a(b.target).is(d.$element) && (d.ignoreBackdropClick = !0);
452      });
453    }), this.backdrop(function () {
454      var e = a.support.transition && d.$element.hasClass("fade");
455      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();
456      var f = a.Event("shown.bs.modal", {
457        relatedTarget: b
458      });
459      e ? d.$dialog.one("bsTransitionEnd", function () {
460        d.$element.trigger("focus").trigger(f);
461      }).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger("focus").trigger(f);
462    }));
463  }, c.prototype.hide = function (b) {
464    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("
464click.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());
465  }, c.prototype.enforceFocus = function () {
466    a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) {
467      document === a.target || this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus");
468    }, this));
469  }, c.prototype.escape = function () {
470    this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", a.proxy(function (a) {
471      27 == a.which && this.hide();
472    }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal");
473  }, c.prototype.resize = function () {
474    this.isShown ? a(window).on("resize.bs.modal", a.proxy(this.handleUpdate, this)) : a(window).off("resize.bs.modal");
475  }, c.prototype.hideModal = function () {
476    var a = this;
477    this.$element.hide(), this.backdrop(function () {
478      a.$body.removeClass("modal-open"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger("hidden.bs.modal");
479    });
480  }, c.prototype.removeBackdrop = function () {
481    this.$backdrop && this.$backdrop.remove(), this.$backdrop = null;
482  }, c.prototype.backdrop = function (b) {
483    var d = this,
484        e = this.$element.hasClass("fade") ? "fade" : "";
485
486    if (this.isShown && this.options.backdrop) {
487      var f = a.support.transition && e;
488      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) {
489        return this.ignoreBackdropClick ? void (this.ignoreBackdropClick = !1) : void (a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide()));
490      }, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
491      f ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b();
492    } else if (!this.isShown && this.$backdrop) {
493      this.$backdrop.removeClass("in");
494
495      var g = function g() {
496        d.removeBackdrop(), b && b();
497      };
498
499      a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g();
500    } else b && b();
501  }, c.prototype.handleUpdate = function () {
502    this.adjustDialog();
503  }, c.prototype.adjustDialog = function () {
504    var a = this.$element[0].scrollHeight > document.documentElement.clientHeight;
505    this.$element.css({
506      paddingLeft: !this.bodyIsOverflowing && a ? this.scrollbarWidth : "",
507      paddingRight: this.bodyIsOverflowing && !a ? this.scrollbarWidth : ""
508    });
509  }, c.prototype.resetAdjustments = function () {
510    this.$element.css({
511      paddingLeft: "",
512      paddingRight: ""
513    });
514  }, c.prototype.checkScrollbar = function () {
515    var a = window.innerWidth;
516
517    if (!a) {
518      var b = document.documentElement.getBoundingClientRect();
519      a = b.right - Math.abs(b.left);
520    }
521
522    this.bodyIsOverflowing = document.body.clientWidth < a, this.scrollbarWidth = this.measureScrollbar();
523  }, c.prototype.setScrollbar = function () {
524    var a = parseInt(this.$body.css("padding-right") || 0, 10);
525    this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", a + this.scrollbarWidth);
526  }, c.prototype.resetScrollbar = function () {
527    this.$body.css("padding-right", this.originalBodyPad);
528  }, c.prototype.measureScrollbar = function () {
529    var a = document.createElement("div");
530    a.className = "modal-scrollbar-measure", this.$body.append(a);
531    var b = a.offsetWidth - a.clientWidth;
532    return this.$body[0].removeChild(a), b;
533  };
534  var d = a.fn.modal;
535  a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function () {
536    return a.fn.modal = d, this;
537  }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (c) {
538    var d = a(this),
539        e = d.attr("href"),
540        f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")),
541        g = f.data("bs.modal") ? "toggle" : a.extend({
542      remote: !/#/.test(e) && e
543    }, f.data(), d.data());
544    d.is("a") && c.preventDefault(), f.one("show.bs.modal", function (a) {
545      a.isDefaultPrevented() || f.one("hidden.bs.modal", function () {
546        d.is(":visible") && d.trigger("focus");
547      });
548    }), b.call(f, g, this);
549  });
550}(jQuery), +function (a) {
551  "use strict";
552
553  function b(b) {
554    return this.each(function () {
555      var d = a(this),
556          e = d.data("bs.tooltip"),
557          f = "object" == _typeof(b) && b;
558      !e && /destroy|hide/.test(b) || (e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]());
559    });
560  }
561
562  var c = function c(a, b) {
563    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);
564  };
565
566  c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.DEFAULTS = {
567    animation: !0,
568    placement: "top",
569    selector: !1,
570    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
571    trigger: "hover focus",
572    title: "",
573    delay: 0,
574    html: !1,
575    container: !1,
576    viewport: {
577      selector: "body",
578      padding: 0
579    }
580  }, c.prototype.init = function (b, c, d) {
581    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 = {
582      click: !1,
583      hover: !1,
584      focus: !1
585    }, 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!");
586
587    for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
588      var g = e[f];
589      if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));else if ("manual" != g) {
590        var h = "hover" == g ? "mouseenter" : "focusin",
591            i = "hover" == g ? "mouseleave" : "focusout";
592        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));
593      }
594    }
595
596    this.options.selector ? this._options = a.extend({}, this.options, {
597      trigger: "manual",
598      selector: ""
599    }) : this.fixTitle();
600  }, c.prototype.getDefaults = function () {
601    return c.DEFAULTS;
602  }, c.prototype.getOptions = function (b) {
603    return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
604      show: b.delay,
605      hide: b.delay
606    }), b;
607  }, c.prototype.getDelegateOptions = function () {
608    var b = {},
609        c = this.getDefaults();
610    return this._options && a.each(this._options, function (a, d) {
611      c[a] != d && (b[a] = d);
612    }), b;
613  }, c.prototype.enter = function (b) {
614    var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
615    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 () {
616      "in" == c.hoverState && c.show();
617    }, c.options.delay.show)) : c.show());
618  }, c.prototype.isInStateTrue = function () {
619    for (var a in this.inState) {
620      if (this.inState[a]) return !0;
621    }
622
623    return !1;
624  }, c.prototype.leave = function (b) {
625    var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
626    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 () {
627      "out" == c.hoverState && c.hide();
628    }, c.options.delay.hide)) : c.hide();
629  }, c.prototype.show = function () {
630    var b = a.Event("show.bs." + this.type);
631
632    if (this.hasContent() && this.enabled) {
633      this.$element.trigger(b);
634      var d = a.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
635      if (b.isDefaultPrevented() || !d) return;
636      var e = this,
637          f = this.tip(),
638          g = this.getUID(this.type);
639      this.setContent(), f.attr("id", g), this.$element.attr("aria-describedby", g), this.options.animation && f.addClass("fade");
640      var h = "function" == typeof this.options.placement ? this.options.placement.call(this, f[0], this.$element[0]) : this.options.placement,
641          i = /\s?auto?\s?/i,
642          j = i.test(h);
643      j && (h = h.replace(i, "") || "top"), f.detach().css({
644        top: 0,
645        left: 0,
646        display: "block"
647      }).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);
648      var k = this.getPosition(),
649          l = f[0].offsetWidth,
650          m = f[0].offsetHeight;
651
652      if (j) {
653        var n = h,
654            o = this.getPosition(this.$viewport);
655        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);
656      }
657
658      var p = this.getCalculatedOffset(h, k, l, m);
659      this.applyPlacement(p, h);
660
661      var q = function q() {
662        var a = e.hoverState;
663        e.$element.trigger("shown.bs." + e.type), e.hoverState = null, "out" == a && e.leave(e);
664      };
665
666      a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", q).emulateTransitionEnd(c.TRANSITION_DURATION) : q();
667    }
668  }, c.prototype.applyPlacement = function (b, c) {
669    var d = this.tip(),
670        e = d[0].offsetWidth,
671        f = d[0].offsetHeight,
672        g = parseInt(d.css("margin-top"), 10),
673        h = parseInt(d.css("margin-left"), 10);
674    isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top += g, b.left += h, a.offset.setOffset(d[0], a.extend({
675      using: function using(a) {
676        d.css({
677          top: Math.round(a.top),
678          left: Math.round(a.left)
679        });
680      }
681    }, b), 0), d.addClass("in");
682    var i = d[0].offsetWidth,
683        j = d[0].offsetHeight;
684    "top" == c && j != f && (b.top = b.top + f - j);
685    var k = this.getViewportAdjustedDelta(c, b, i, j);
686    k.left ? b.left += k.left : b.top += k.top;
687    var l = /top|bottom/.test(c),
688        m = l ? 2 * k.left - e + i : 2 * k.top - f + j,
689        n = l ? "offsetWidth" : "offsetHeight";
690    d.offset(b), this.replaceArrow(m, d[0][n], l);
691  }, c.prototype.replaceArrow = function (a, b, c) {
692    this.arrow().css(c ? "left" : "top", 50 * (1 - a / b) + "%").css(c ? "top" : "left", "");
693  }, c.prototype.setContent = function () {
694    var a = this.tip(),
695        b = this.getTitle();
696    a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right");
697  }, c.prototype.hide = function (b) {
698    function d() {
699      "in" != e.hoverState && f.detach(), e.$element && e.$element.removeAttr("aria-describedby").trigger("hidden.bs." + e.type), b && b();
700    }
701
702    var e = this,
703        f = a(this.$tip),
704        g = a.Event("hide.bs." + this.type);
705    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;
706  }, c.prototype.fixTitle = function () {
707    var a = this.$element;
708    (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "");
709  }, c.prototype.hasContent = function () {
710    return this.getTitle();
711  }, c.prototype.getPosition = function (b) {
712    b = b || this.$element;
713    var c = b[0],
714        d = "BODY" == c.tagName,
715        e = c.getBoundingClientRect();
716    null == e.width && (e = a.extend({}, e, {
717      width: e.right - e.left,
718      height: e.bottom - e.top
719    }));
720    var f = window.SVGElement && c instanceof window.SVGElement,
721        g = d ? {
722      top: 0,
723      left: 0
724    } : f ? null : b.offset(),
725        h = {
726      scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop()
727    },
728        i = d ? {
729      width: a(window).width(),
730      height: a(window).height()
731    } : null;
732    return a.extend({}, e, h, i, g);
733  }, c.prototype.getCalculatedOffset = function (a, b, c, d) {
734    return "bottom" == a ? {
735      top: b.top + b.height,
736      left: b.left + b.width / 2 - c / 2
737    } : "top" == a ? {
738      top: b.top - d,
739      left: b.left + b.width / 2 - c / 2
740    } : "left" == a ? {
741      top: b.top + b.height / 2 - d / 2,
742      left: b.left - c
743    } : {
744      top: b.top + b.height / 2 - d / 2,
745      left: b.left + b.width
746    };
747  }, c.prototype.getViewportAdjustedDelta = function (a, b, c, d) {
748    var e = {
749      top: 0,
750      left: 0
751    };
752    if (!this.$viewport) return e;
753    var f = this.options.viewport && this.options.viewport.padding || 0,
754        g = this.getPosition(this.$viewport);
755
756    if (/right|left/.test(a)) {
757      var h = b.top - f - g.scroll,
758          i = b.top + f - g.scroll + d;
759      h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i);
760    } else {
761      var j = b.left - f,
762          k = b.left + f + c;
763      j < g.left ? e.left = g.left - j : k > g.right && (e.left = g.left + g.width - k);
764    }
765
766    return e;
767  }, c.prototype.getTitle = function () {
768    var a,
769        b = this.$element,
770        c = this.options;
771    return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title);
772  }, c.prototype.getUID = function (a) {
773    do {
774      a += ~~(1e6 * Math.random());
775    } while (document.getElementById(a));
776
777    return a;
778  }, c.prototype.tip = function () {
779    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!");
780    return this.$tip;
781  }, c.prototype.arrow = function () {
782    return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow");
783  }, c.prototype.enable = function () {
784    this.enabled = !0;
785  }, c.prototype.disable = function () {
786    this.enabled = !1;
787  }, c.prototype.toggleEnabled = function () {
788    this.enabled = !this.enabled;
789  }, c.prototype.toggle = function (b) {
790    var c = this;
791    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);
792  }, c.prototype.destroy = function () {
793    var a = this;
794    clearTimeout(this.timeout), this.hide(function () {
795      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;
796    });
797  };
798  var d = a.fn.tooltip;
799  a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function () {
800    return a.fn.tooltip = d, this;
801  };
802}(jQuery), +function (a) {
803  "use strict";
804
805  function b(b) {
806    return this.each(function () {
807      var d = a(this),
808          e = d.data("bs.popover"),
809          f = "object" == _typeof(b) && b;
810      !e && /destroy|hide/.test(b) || (e || d.data("bs.popover", e = new c(this, f)), "string" == typeof b && e[b]());
811    });
812  }
813
814  var c = function c(a, b) {
815    this.init("popover", a, b);
816  };
817
818  if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
819  c.VERSION = "3.3.7", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
820    placement: "right",
821    trigger: "click",
822    content: "",
823    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
824  }), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function () {
825    return c.DEFAULTS;
826  }, c.prototype.setContent = function () {
827    var a = this.tip(),
828        b = this.getTitle(),
829        c = this.getContent();
830    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();
831  }, c.prototype.hasContent = function () {
832    return this.getTitle() || this.getContent();
833  }, c.prototype.getContent = function () {
834    var a = this.$element,
835        b = this.options;
836    return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content);
837  }, c.prototype.arrow = function () {
838    return this.$arrow = this.$arrow || this.tip().find(".arrow");
839  };
840  var d = a.fn.popover;
841  a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function () {
842    return a.fn.popover = d, this;
843  };
844}(jQuery), +function (a) {
845  "use strict";
846
847  function b(c, d) {
848    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();
849  }
850
851  function c(c) {
852    return this.each(function () {
853      var d = a(this),
854          e = d.data("bs.scrollspy"),
855          f = "object" == _typeof(c) && c;
856      e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]();
857    });
858  }
859
860  b.VERSION = "3.3.7", b.DEFAULTS = {
861    offset: 10
862  }, b.prototype.getScrollHeight = function () {
863    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight);
864  }, b.prototype.refresh = function () {
865    var b = this,
866        c = "offset",
867        d = 0;
868    this.offsets = [], this.targets = [], this.scrollHeight = this.get
vendor: 6,410 bytes, lines 868-1014
868ScrollHeight(), a.isWindow(this.$scrollElement[0]) || (c = "position", d = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function () {
869      var b = a(this),
870          e = b.data("target") || b.attr("href"),
871          f = /^#./.test(e) && a(e);
872      return f && f.length && f.is(":visible") && [[f[c]().top + d, e]] || null;
873    }).sort(function (a, b) {
874      return a[0] - b[0];
875    }).each(function () {
876      b.offsets.push(this[0]), b.targets.push(this[1]);
877    });
878  }, b.prototype.process = function () {
879    var a,
880        b = this.$scrollElement.scrollTop() + this.options.offset,
881        c = this.getScrollHeight(),
882        d = this.options.offset + c - this.$scrollElement.height(),
883        e = this.offsets,
884        f = this.targets,
885        g = this.activeTarget;
886    if (this.scrollHeight != c && this.refresh(), b >= d) return g != (a = f[f.length - 1]) && this.activate(a);
887    if (g && b < e[0]) return this.activeTarget = null, this.clear();
888
889    for (a = e.length; a--;) {
890      g != f[a] && b >= e[a] && (void 0 === e[a + 1] || b < e[a + 1]) && this.activate(f[a]);
891    }
892  }, b.prototype.activate = function (b) {
893    this.activeTarget = b, this.clear();
894    var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
895        d = a(c).parents("li").addClass("active");
896    d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy");
897  }, b.prototype.clear = function () {
898    a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active");
899  };
900  var d = a.fn.scrollspy;
901  a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () {
902    return a.fn.scrollspy = d, this;
903  }, a(window).on("load.bs.scrollspy.data-api", function () {
904    a('[data-spy="scroll"]').each(function () {
905      var b = a(this);
906      c.call(b, b.data());
907    });
908  });
909}(jQuery), +function (a) {
910  "use strict";
911
912  function b(b) {
913    return this.each(function () {
914      var d = a(this),
915          e = d.data("bs.tab");
916      e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b]();
917    });
918  }
919
920  var c = function c(b) {
921    this.element = a(b);
922  };
923
924  c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.prototype.show = function () {
925    var b = this.element,
926        c = b.closest("ul:not(.dropdown-menu)"),
927        d = b.data("target");
928
929    if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
930      var e = c.find(".active:last a"),
931          f = a.Event("hide.bs.tab", {
932        relatedTarget: b[0]
933      }),
934          g = a.Event("show.bs.tab", {
935        relatedTarget: e[0]
936      });
937
938      if (e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented()) {
939        var h = a(d);
940        this.activate(b.closest("li"), c), this.activate(h, h.parent(), function () {
941          e.trigger({
942            type: "hidden.bs.tab",
943            relatedTarget: b[0]
944          }), b.trigger({
945            type: "shown.bs.tab",
946            relatedTarget: e[0]
947          });
948        });
949      }
950    }
951  }, c.prototype.activate = function (b, d, e) {
952    function f() {
953      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();
954    }
955
956    var g = d.find("> .active"),
957        h = e && a.support.transition && (g.length && g.hasClass("fade") || !!d.find("> .fade").length);
958    g.length && h ? g.one("bsTransitionEnd", f).emulateTransitionEnd(c.TRANSITION_DURATION) : f(), g.removeClass("in");
959  };
960  var d = a.fn.tab;
961  a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function () {
962    return a.fn.tab = d, this;
963  };
964
965  var e = function e(c) {
966    c.preventDefault(), b.call(a(this), "show");
967  };
968
969  a(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', e).on("click.bs.tab.data-api", '[data-toggle="pill"]', e);
970}(jQuery), +function (a) {
971  "use strict";
972
973  function b(b) {
974    return this.each(function () {
975      var d = a(this),
976          e = d.data("bs.affix"),
977          f = "object" == _typeof(b) && b;
978      e || d.data("bs.affix", e = new c(this, f)), "string" == typeof b && e[b]();
979    });
980  }
981
982  var c = function c(b, d) {
983    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();
984  };
985
986  c.VERSION = "3.3.7", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = {
987    offset: 0,
988    target: window
989  }, c.prototype.getState = function (a, b, c, d) {
990    var e = this.$target.scrollTop(),
991        f = this.$element.offset(),
992        g = this.$target.height();
993    if (null != c && "top" == this.affixed) return e < c && "top";
994    if ("bottom" == this.affixed) return null != c ? !(e + this.unpin <= f.top) && "bottom" : !(e + g <= a - d) && "bottom";
995    var h = null == this.affixed,
996        i = h ? e : f.top,
997        j = h ? g : b;
998    return null != c && e <= c ? "top" : null != d && i + j >= a - d && "bottom";
999  }, c.prototype.getPinnedOffset = function () {
1000    if (this.pinnedOffset) return this.pinnedOffset;
1001    this.$element.removeClass(c.RESET).addClass("affix");
1002    var a = this.$target.scrollTop(),
1003        b = this.$element.offset();
1004    return this.pinnedOffset = b.top - a;
1005  }, c.prototype.checkPositionWithEventLoop = function () {
1006    setTimeout(a.proxy(this.checkPosition, this), 1);
1007  }, c.prototype.checkPosition = function () {
1008    if (this.$element.is(":visible")) {
1009      var b = this.$element.height(),
1010          d = this.options.offset,
1011          e = d.top,
1012          f = d.bottom,
1013          g = Math.max(a(document).height(), a(document.body).height());
1014      "object" != _typeof(d) && (f = e = d), "function" == typeof e && (e = d.top(this.$element)), "function" == typeof f && (f = d.bottom(this.$element));
1015      var h = this.getState(g, b, e, f);
1016
1017      if (this.affixed != h) {
1018        null != this.unpin && this.$element.css("top", "");
1019        var i = "affix" + (h ? "-" + h : ""),
1020            j = a.Event(i + ".bs.affix");
1021        if (this.$element.trigger(j), j.isDefaultPrevented()) return;
1022        this.affixed = h, this.unpin = "bottom" == h ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix", "affixed") + ".bs.affix");
1023      }
1024
1025      "bottom" == h && this.$element.offset({
1026        top: g - b - f
1027      });
1028    }
1029  };
1030  var d = a.fn.affix;
1031  a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function () {
1032    return a.fn.affix = d, this;
1033  }, a(window).on("load", function () {
1034    a('[data-spy="affix"]').each(function () {
1035      var c = a(this),
1036          d = c.data();
1037      d.offset = d.offset || {}, null != d.offsetBottom && (d.offset.bottom = d.offsetBottom), null != d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d);
1038    });
1039  });
1040}(jQuery);
1041
1042/***/ }),
1043
1044/***/ "./resources/js/jquery.min.js":
1045/*!************************************!*\
1046  !*** ./resources/js/jquery.min.js ***!
1047  \************************************/
1048/***/ (function(module, exports, __webpack_require__) {
1049
1050/* module decorator */ module = __webpack_require__.nmd(module);
1051var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1052
1053/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
1054!function (a, b) {
1055  "object" == ( false ? 0 : _typeof(module)) && "object" == _typeof(module.exports) ? module.exports = a.document ? b(a, !0) : function (a) {
1056    if (!a.document) throw new Error("jQuery requires a window with a document");
1057    return b(a);
1058  } : b(a);
1059}("undefined" != typeof window ? window : this, function (a, b) {
1060  var c = [],
1061      d = a.document,
1062      e = c.slice,
1063      f = c.concat,
1064      g = c.push,
1065      h = c.indexOf,
1066      i = {},
1067      j = i.toString,
1068      k = i.hasOwnProperty,
1069      l = {},
1070      m = "1.12.4",
1071      n = function n(a, b) {
1072    return new n.fn.init(a, b);
1073  },
1074      o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
1075      p = /^-ms-/,
1076      q = /-([\da-z])/gi,
1077      r = function r(a, b) {
1078    return b.toUpperCase();
1079  };
1080
1081  n.fn = n.prototype = {
1082    jquery: m,
1083    constructor: n,
1084    selector: "",
1085    length: 0,
1086    toArray: function toArray() {
1087      return e.call(this);
1088    },
1089    get: function get(a) {
1090      return null != a ? 0 > a ? this[a + this.length] : this[a] : e.call(this);
1091    },
1092    pushStack: function pushStack(a) {
1093      var b = n.merge(this.constructor(), a);
1094      return b.prevObject = this, b.context = this.context, b;
1095    },
1096    each: function each(a) {
1097      return n.each(this, a);
1098    },
1099    map: function map(a) {
1100      return this.pushStack(n.map(this, function (b, c) {
1101        return a.call(b, c, b);
1102      }));
1103    },
1104    slice: function slice() {
1105      return this.pushStack(e.apply(this, arguments));
1106    },
1107    first: function first() {
1108      return this.eq(0);
1109    },
1110    last: function last() {
1111      return this.eq(-1);
1112    },
1113    eq: function eq(a) {
1114      var b = this.length,
1115          c = +a + (0 > a ? b : 0);
1116      return this.pushStack(c >= 0 && b > c ? [this[c]] : []);
1117    },
1118    end: function end() {
1119      return this.prevObject || this.constructor();
1120    },
1121    push: g,
1122    sort: c.sort,
1123    splice: c.splice
1124  }, n.extend = n.fn.extend = function () {
1125    var a,
1126        b,
1127        c,
1128        d,
1129        e,
1130        f,
1131        g = arguments[0] || {},
1132        h = 1,
1133        i = arguments.length,
1134        j = !1;
1135
1136    for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == _typeof(g) || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++) {
1137      if (null != (e = arguments[h])) for (d in e) {
1138        a = g[d], c = e[d], g !== c && (j && c && (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a && n.isArray(a) ? a : []) : f = a && n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c && (g[d] = c));
1139      }
1140    }
1141
1142    return g;
1143  }, n.extend({
1144    expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""),
1145    isReady: !0,
1146    error: function error(a) {
1147      throw new Error(a);
1148    },
1149    noop: function noop() {},
1150    isFunction: function isFunction(a) {
1151      return "function" === n.type(a);
1152    },
1153    isArray: Array.isArray || function (a) {
1154      return "array" === n.type(a);
1155    },
1156    isWindow: function isWindow(a) {
1157      return null != a && a == a.window;
1158    },
1159    isNumeric: function isNumeric(a) {
1160      var b = a && a.toString();
1161      return !n.isArray(a) && b - parseFloat(b) + 1 >= 0;
1162    },
1163    isEmptyObject: function isEmptyObject(a) {
1164      var b;
1165
1166      for (b in a) {
1167        return !1;
1168      }
1169
1170      return !0;
1171    },
1172    isPlainObject: function isPlainObject(a) {
1173      var b;
1174      if (!a || "object" !== n.type(a) || a.nodeType || n.isWindow(a)) return !1;
1175
1176      try {
1177        if (a.constructor && !k.call(a, "constructor") && !k.call(a.constructor.prototype, "isPrototypeOf")) return !1;
1178      } catch (c) {
1179        return !1;
1180      }
1181
1182      if (!l.ownFirst) for (b in a) {
1183        return k.call(a, b);
1184      }
1185
1186      for (b in a) {
1187        ;
1188      }
1189
1190      return void 0 === b || k.call(a, b);
1191    },
1192    type: function type(a) {
1193      return null == a ? a + "" : "object" == _typeof(a) || "function" == typeof a ? i[j.call(a)] || "object" : _typeof(a);
1194    },
1195    globalEval: function globalEval(b) {
1196      b && n.trim(b) && (a.execScript || function (b) {
1197        a.eval.call(a, b);
1198      })(b);
1199    },
1200    camelCase: function camelCase(a) {
1201      return a.replace(p, "ms-").replace(q, r);
1202    },
1203    nodeName: function nodeName(a, b) {
1204      return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase();
1205    },
1206    each: function each(a, b) {
1207      var c,
1208          d = 0;
1209
1210      if (s(a)) {
1211        for (c = a.length; c > d; d++) {
1212          if (b.call(a[d], d, a[d]) === !1) break;
1213        }
1214      } else for (d in a) {
1215        if (b.call(a[d], d, a[d]) === !1) break;
1216      }
1217
1218      return a;
1219    },
1220    trim: function trim(a) {
1221      return null == a ? "" : (a + "").replace(o, "");
1222    },
1223    makeArray: function makeArray(a, b) {
1224      var c = b || [];
1225      return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : g.call(c, a)), c;
1226    },
1227    inArray: function inArray(a, b, c) {
1228      var d;
1229
1230      if (b) {
1231        if (h) return h.call(b, a, c);
1232
1233        for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++) {
1234          if (c in b && b[c] === a) return c;
1235        }
1236      }
1237
1238      return -1;
1239    },
1240    merge: function merge(a, b) {
1241      var c = +b.length,
1242          d = 0,
1243          e = a.length;
1244
1245      while (c > d) {
1246        a[e++] = b[d++];
1247      }
1248
1249      if (c !== c) while (void 0 !== b[d]) {
1250        a[e++] = b[d++];
1251      }
1252      return a.length = e, a;
1253    },
1254    grep: function grep(a, b, c) {
1255      for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++) {
1256        d = !b(a[f], f), d !== h && e.push(a[f]);
1257      }
1258
1259      return e;
1260    },
1261    map: function map(a, b, c) {
1262      var d,
1263          e,
1264          g = 0,
1265          h = [];
1266      if (s(a)) for (d = a.length; d > g; g++) {
1267        e = b(a[g], g, c), null != e && h.push(e);
1268      } else for (g in a) {
1269        e = b(a[g], g, c), null != e && h.push(e);
1270      }
1271      return f.apply([], h);
1272    },
1273    guid: 1,
1274    proxy: function proxy(a, b) {
1275      var c, d, f;
1276      return "string" == typeof b && (f = a[b], b = a, a = f), n.isFunction(a) ? (c = e.call(arguments, 2), d = function d() {
1277        return a.apply(b || this, c.concat(e.call(arguments)));
1278      }, d.guid = a.guid = a.guid || n.guid++, d) : void 0;
1279    },
1280    now: function now() {
1281      return +new Date();
1282    },
1283    support: l
1284  }), "function" == typeof Symbol && (n.fn[Symbol.iterator] = c[Symbol.iterator]), n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (a, b) {
1285    i["[object " + b + "]"] = b.toLowerCase();
1286  });
1287
1288  function s(a) {
1289    var b = !!a && "length" in a && a.length,
1290        c = n.type(a);
1291    return "function" === c || n.isWindow(a) ? !1 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a;
1292  }
1293
1294  var t = function (a) {
1295    var b,
1296        c,
1297        d,
1298        e,
1299        f,
1300        g,
1301        h,
1302        i,
1303        j,
1304        k,
1305        l,
1306        m,
1307        n,
1308        o,
1309        p,
1310        q,
1311        r,
1312        s,
1313        t,
1314        u = "sizzle" + 1 * new Date(),
1315        v = a.document,
1316        w = 0,
1317        x = 0,
1318        y = ga(),
1319        z = ga(),
1320        A = ga(),
1321        B = function B(a, b) {
1322      return a === b && (l = !0), 0;
1323    },
1324        C = 1 << 31,
1325        D = {}.hasOwnProperty,
1326        E = [],
1327        F = E.pop,
1328        G = E.push,
1329        H = E.push,
1330        I = E.slice,
1331        J = function J(a, b) {
1332      for (var c = 0, d = a.length; d > c; c++) {
1333        if (a[c] === b) return c;
1334      }
1335
1336      return -1;
1337    },
1338        K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
1339        L = "[\\x20\\t\\r\\n\\f]",
1340        M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
1341        N = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + M + "))|)" + L + "*\\]",
1342        O = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + N + ")*)|.*)\\)|)",
1343        P = new RegExp(L + "+", "g"),
1344        Q = new RegExp("^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$", "g"),
1345        R = new RegExp("^" + L + "*," + L + "*"),
1346        S = new RegExp("^" + L + "*([>+~]|" + L + ")" + L + "*"),
1347        T = new RegExp("=" + L + "*([^\\]'\"]*?)" + L + "*\\]", "g"),
1348        U = new RegExp(O),
1349        V = new RegExp("^" + M + "$"),
1350        W = {
1351      ID: new RegExp("^#(" + M + ")"),
1352      CLASS: new RegExp("^\\.(" + M + ")"),
1353      TAG: new RegExp("^(" + M + "|[*])"),
1354      ATTR: new RegExp("^" + N),
1355      PSEUDO: new RegExp("^" + O),
1356      CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)", "i"),
1357      bool: new RegExp("^(?:" + K + ")$", "i"),
1358      needsContext: new RegExp("^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)", "i")
1359    },
1360        X = /^(?:input|select|textarea|button)$/i,
1361        Y = /^h\d$/i,
1362        Z = /^[^{]+\{\s*\[native \w/,
1363        $ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
1364        _ = /[+~]/,
1365        aa = /'|\\/g,
1366        ba = new RegExp("\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)", "ig"),
1367        ca = function ca(a, b, c) {
1368      var d = "0x" + b - 65536;
1369      return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320);
1370    },
1371        da = function da() {
1372      m();
1373    };
1374
1375    try {
1376      H.apply(E = I.call(v.childNodes), v.childNodes), E[v.childNodes.length].nodeType;
1377    } catch (ea) {
1378      H = {
1379        apply: E.length ? function (a, b) {
1380          G.apply(a, I.call(b));
1381        } : function (a, b) {
1382          var c = a.length,
1383              d = 0;
1384
1385          while (a[c++] = b[d++]) {
1386            ;
1387          }
1388
1389          a.length = c - 1;
1390        }
1391      };
1392    }
1393
1394    function fa(a, b, d, e) {
1395      var f,
1396          h,
1397          j,
1398          k,
1399          l,
1400          o,
1401          r,
1402          s,
1403          w = b && b.ownerDocument,
1404          x = b ? b.nodeType : 9;
1405      if (d = d || [], "string" != typeof a || !a || 1 !== x && 9 !== x && 11 !== x) return d;
1406
1407      if (!e && ((b ? b.ownerDocument || b : v) !== n && m(b), b = b || n, p)) {
1408        if (11 !== x && (o = $.exec(a))) if (f = o[1]) {
1409          if (9 === x) {
1410            if (!(j = b.getElementById(f))) return d;
1411            if (j.id === f) return d.push(j), d;
1412          } else if (w && (j = w.getElementById(f)) && t(b, j) && j.id === f) return d.push(j), d;
1413        } else {
1414          if (o[2]) return H.apply(d, b.getElementsByTagName(a)), d;
1415          if ((f = o[3]) && c.getElementsByClassName && b.getElementsByClassName) return H.apply(d, b.getElementsByClassName(f)), d;
1416        }
1417
1418        if (c.qsa && !A[a + " "] && (!q || !q.test(a))) {
1419          if (1 !== x) w = b, s = a;else if ("object" !== b.nodeName.toLowerCase()) {
1420            (k = b.getAttribute("id")) ? k = k.replace(aa, "\\$&") : b.setAttribute("id", k = u), r = g(a), h = r.length, l = V.test(k) ? "#" + k : "[id='" + k + "']";
1421
1422            while (h--) {
1423              r[h] = l + " " + qa(r[h]);
1424            }
1425
1426            s = r.join(","), w = _.test(a) && oa(b.parentNode) || b;
1427          }
1428          if (s) try {
1429            return H.apply(d, w.querySelectorAll(s)), d;
1430          } catch (y) {} finally {
1431            k === u && b.removeAttribute("id");
1432          }
1433        }
1434      }
1435
1436      return i(a.replace(Q, "$1"), b, d, e);
1437    }
1438
1439    function ga() {
1440      var a = [];
1441
1442      function b(c, e) {
1443        return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e;
1444      }
1445
1446      return b;
1447    }
1448
1449    function ha(a) {
1450      return a[u] = !0, a;
1451    }
1452
1453    function ia(a) {
1454      var b = n.createElement("div");
1455
1456      try {
1457        return !!a(b);
1458      } catch (c) {
1459        return !1;
1460      } finally {
1461        b.parentNode && b.parentNode.removeChild(b), b = null;
1462      }
1463    }
1464
1465    function ja(a, b) {
1466      var c = a.split("|"),
1467          e = c.length;
1468
1469      while (e--) {
1470        d.attrHandle[c[e]] = b;
1471      }
1472    }
1473
1474    function ka(a, b) {
1475      var c = b && a,
1476          d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || C) - (~a.sourceIndex || C);
1477      if (d) return d;
1478      if (c) while (c = c.nextSibling) {
1479        if (c === b) return -1;
1480      }
1481      return a ? 1 : -1;
1482    }
1483
1484    function la(a) {
1485      return function (b) {
1486        var c = b.nodeName.toLowerCase();
1487        return "input" === c && b.type === a;
1488      };
1489    }
1490
1491    function ma(a) {
1492      return function (b) {
1493        var c = b.nodeName.toLowerCase();
1494        return ("input" === c || "button" === c) && b.type === a;
1495      };
1496    }
1497
1498    function na(a) {
1499      return ha(function (b) {
1500        return b = +b, ha(function (c, d) {
1501          var e,
1502              f = a([], c.length, b),
1503              g = f.length;
1504
1505          while (g--) {
1506            c[e = f[g]] && (c[e] = !(d[e] = c[e]));
1507          }
1508        });
1509      });
1510    }
1511
1512    function oa(a) {
1513      return a && "undefined" != typeof a.getElementsByTagName && a;
1514    }
1515
1516    c = fa.support = {}, f = fa.isXML = function (a) {
1517      var b = a && (a.ownerDocument || a).documentElement;
1518      return b ? "HTML" !== b.nodeName : !1;
1519    }, m = fa.setDocument = function (a) {
1520      var b,
1521          e,
1522          g = a ? a.ownerDocument || a : v;
1523      return g !== n && 9 === g.nodeType && g.documentElement ? (n = g, o = n.documentElement, p = !f(n), (e = n.defaultView) && e.top !== e && (e.addEventListener ? e.addEventListener("unload", da, !1) : e.attachEvent && e.attachEvent("onunload", da)), c.attributes = ia(function (a) {
1524        return a.className = "i", !a.getAttribute("className");
1525      }), c.getElementsByTagName = ia(function (a) {
1526        return a.appendChild(n.createComment("")), !a.getElementsByTagName("*").length;
1527      }), c.getElementsByClassName = Z.test(n.getElementsByClassName), c.getById = ia(function (a) {
1528        return o.appendChild(a).id = u, !n.getElementsByName || !n.getElementsByName(u).length;
1529      }), c.getById ? (d.find.ID = function (a, b) {
1530        if ("undefined" != typeof b.getElementById && p) {
1531          var c = b.getElementById(a);
1532          return c ? [c] : [];
1533        }
1534      }, d.filter.ID = function (a) {
1535        var b = a.replace(ba, ca);
1536        return function (a) {
1537          return a.getAttribute("id") === b;
1538        };
1539      }) : (delete d.find.ID, d.filter.ID = function (a) {
1540        var b = a.replace(ba, ca);
1541        return function (a) {
1542          var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id");
1543          return c && c.value === b;
1544        };
1545      }), d.find.TAG = c.getElementsByTagName ? function (a, b) {
1546        return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(a) : c.qsa ? b.querySelectorAll(a) : void 0;
1547      } : function (a, b) {
1548        var c,
1549            d = [],
1550            e = 0,
1551            f = b.getElementsByTagName(a);
1552
1553        if ("*" === a) {
1554          while (c = f[e++]) {
1555            1 === c.nodeType && d.push(c);
1556          }
1557
1558          return d;
1559        }
1560
1561        return f;
1562      }, d.find.CLASS = c.getElementsByClassName && function (a, b) {
1563        return "undefined" != typeof b.getElementsByClassName && p ? b.getElementsByClassName(a) : void 0;
1564      }, r = [], q = [], (c.qsa = Z.test(n.querySelectorAll)) && (ia(function (a) {
1565        o.appendChild(a).innerHTML = "<a id='" + u + "'></a><select id='" + u + "-\r\\' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && q.push("[*^$]=" + L + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + L + "*(?:value|" + K + ")"), a.querySelectorAll("[id~=" + u + "-]").length || q.push("~="), a.querySelectorAll(":checked").length || q.push(":checked"), a.querySelectorAll("a#" + u + "+*").length || q.push(".#.+[+~]");
1566      }), ia(function (a) {
1567        var b = n.createElement("input");
1568        b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + L + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:");
1569      })), (c.matchesSelector = Z.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && ia(function (a) {
1570        c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", O);
1571      }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = Z.test(o.compareDocumentPosition), t = b || Z.test(o.contains) ? function (a, b) {
1572        var c = 9 === a.nodeType ? a.documentElement : a,
1573            d = b && b.parentNode;
1574        return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)));
1575      } : function (a, b) {
1576        if (b) while (b = b.parentNode) {
1577          if (b === a) return !0;
1578        }
1579        return !1;
1580      }, B = b ? function (a, b) {
1581        if (a === b) return l = !0, 0;
1582        var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
1583        return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === n || a.ownerDocument === v && t(v, a) ? -1 : b === n || b.ownerDocument === v && t(v, b) ? 1 : k ? J(k, a) - J(k, b) : 0 : 4 & d ? -1 : 1);
1584      } : function (a, b) {
1585        if (a === b) return l = !0, 0;
1586        var c,
1587            d = 0,
1588            e = a.parentNode,
1589            f = b.parentNode,
1590            g = [a],
1591            h = [b];
1592        if (!e || !f) return a === n ? -1 : b === n ? 1 : e ? -1 : f ? 1 : k ? J(k, a) - J(k, b) : 0;
1593        if (e === f) return ka(a, b);
1594        c = a;
1595
1596        while (c = c.parentNode) {
1597          g.unshift(c);
1598        }
1599
1600        c = b;
1601
1602        while (c = c.parentNode) {
1603          h.unshift(c);
1604        }
1605
1606        while (g[d] === h[d]) {
1607          d++;
1608        }
1609
1610        return d ? ka(g[d], h[d]) : g[d] === v ? -1 : h[d] === v ? 1 : 0;
1611      }, n) : n;
1612    }, fa.matches = function (a, b) {
1613      return fa(a, null, null, b);
1614    }, fa.matchesSelector = function (a, b) {
1615      if ((a.ownerDocument || a) !== n && m(a), b = b.replace(T, "='$1']"), c.matchesSelector && p && !A[b + " "] && (!r || !r.test(b)) && (!q || !q.test(b))) try {
1616        var d = s.call(a, b);
1617        if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d;
1618      } catch (e) {}
1619      return fa(b, n, null, [a]).length > 0;
1620    }
1620, fa.contains = function (a, b) {
1621      return (a.ownerDocument || a) !== n && m(a), t(a, b);
1622    }, fa.attr = function (a, b) {
1623      (a.ownerDocument || a) !== n && m(a);
1624      var e = d.attrHandle[b.toLowerCase()],
1625          f = e && D.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0;
1626      return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null;
1627    }, fa.error = function (a) {
1628      throw new Error("Syntax error, unrecognized expression: " + a);
1629    }, fa.uniqueSort = function (a) {
1630      var b,
1631          d = [],
1632          e = 0,
1633          f = 0;
1634
1635      if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) {
1636        while (b = a[f++]) {
1637          b === a[f] && (e = d.push(f));
1638        }
1639
1640        while (e--) {
1641          a.splice(d[e], 1);
1642        }
1643      }
1644
1645      return k = null, a;
1646    }, e = fa.getText = function (a) {
1647      var b,
1648          c = "",
1649          d = 0,
1650          f = a.nodeType;
1651
1652      if (f) {
1653        if (1 === f || 9 === f || 11 === f) {
1654          if ("string" == typeof a.textContent) return a.textContent;
1655
1656          for (a = a.firstChild; a; a = a.nextSibling) {
1657            c += e(a);
1658          }
1659        } else if (3 === f || 4 === f) return a.nodeValue;
1660      } else while (b = a[d++]) {
1661        c += e(b);
1662      }
1663
1664      return c;
1665    }, d = fa.selectors = {
1666      cacheLength: 50,
1667      createPseudo: ha,
1668      match: W,
1669      attrHandle: {},
1670      find: {},
1671      relative: {
1672        ">": {
1673          dir: "parentNode",
1674          first: !0
1675        },
1676        " ": {
1677          dir: "parentNode"
1678        },
1679        "+": {
1680          dir: "previousSibling",
1681          first: !0
1682        },
1683        "~": {
1684          dir: "previousSibling"
1685        }
1686      },
1687      preFilter: {
1688        ATTR: function ATTR(a) {
1689          return a[1] = a[1].replace(ba, ca), a[3] = (a[3] || a[4] || a[5] || "").replace(ba, ca), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4);
1690        },
1691        CHILD: function CHILD(a) {
1692          return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || fa.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && fa.error(a[0]), a;
1693        },
1694        PSEUDO: function PSEUDO(a) {
1695          var b,
1696              c = !a[6] && a[2];
1697          return W.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && U.test(c) && (b = g(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3));
1698        }
1699      },
1700      filter: {
1701        TAG: function TAG(a) {
1702          var b = a.replace(ba, ca).toLowerCase();
1703          return "*" === a ? function () {
1704            return !0;
1705          } : function (a) {
1706            return a.nodeName && a.nodeName.toLowerCase() === b;
1707          };
1708        },
1709        CLASS: function CLASS(a) {
1710          var b = y[a + " "];
1711          return b || (b = new RegExp("(^|" + L + ")" + a + "(" + L + "|$)")) && y(a, function (a) {
1712            return b.test("string" == typeof a.className && a.className || "undefined" != typeof a.getAttribute && a.getAttribute("class") || "");
1713          });
1714        },
1715        ATTR: function ATTR(a, b, c) {
1716          return function (d) {
1717            var e = fa.attr(d, a);
1718            return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e.replace(P, " ") + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0;
1719          };
1720        },
1721        CHILD: function CHILD(a, b, c, d, e) {
1722          var f = "nth" !== a.slice(0, 3),
1723              g = "last" !== a.slice(-4),
1724              h = "of-type" === b;
1725          return 1 === d && 0 === e ? function (a) {
1726            return !!a.parentNode;
1727          } : function (b, c, i) {
1728            var j,
1729                k,
1730                l,
1731                m,
1732                n,
1733                o,
1734                p = f !== g ? "nextSibling" : "previousSibling",
1735                q = b.parentNode,
1736                r = h && b.nodeName.toLowerCase(),
1737                s = !i && !h,
1738                t = !1;
1739
1740            if (q) {
1741              if (f) {
1742                while (p) {
1743                  m = b;
1744
1745                  while (m = m[p]) {
1746                    if (h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) return !1;
1747                  }
1748
1749                  o = p = "only" === a && !o && "nextSibling";
1750                }
1751
1752                return !0;
1753              }
1754
1755              if (o = [g ? q.firstChild : q.lastChild], g && s) {
1756                m = q, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n && j[2], m = n && q.childNodes[n];
1757
1758                while (m = ++n && m && m[p] || (t = n = 0) || o.pop()) {
1759                  if (1 === m.nodeType && ++t && m === b) {
1760                    k[a] = [w, n, t];
1761                    break;
1762                  }
1763                }
1764              } else if (s && (m = b, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n), t === !1) while (m = ++n && m && m[p] || (t = n = 0) || o.pop()) {
1765                if ((h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) && ++t && (s && (l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), k[a] = [w, t]), m === b)) break;
1766              }
1767
1768              return t -= e, t === d || t % d === 0 && t / d >= 0;
1769            }
1770          };
1771        },
1772        PSEUDO: function PSEUDO(a, b) {
1773          var c,
1774              e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || fa.error("unsupported pseudo: " + a);
1775          return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ha(function (a, c) {
1776            var d,
1777                f = e(a, b),
1778                g = f.length;
1779
1780            while (g--) {
1781              d = J(a, f[g]), a[d] = !(c[d] = f[g]);
1782            }
1783          }) : function (a) {
1784            return e(a, 0, c);
1785          }) : e;
1786        }
1787      },
1788      pseudos: {
1789        not: ha(function (a) {
1790          var b = [],
1791              c = [],
1792              d = h(a.replace(Q, "$1"));
1793          return d[u] ? ha(function (a, b, c, e) {
1794            var f,
1795                g = d(a, null, e, []),
1796                h = a.length;
1797
1798            while (h--) {
1799              (f = g[h]) && (a[h] = !(b[h] = f));
1800            }
1801          }) : function (a, e, f) {
1802            return b[0] = a, d(b, null, f, c), b[0] = null, !c.pop();
1803          };
1804        }),
1805        has: ha(function (a) {
1806          return function (b) {
1807            return fa(a, b).length > 0;
1808          };
1809        }),
1810        contains: ha(function (a) {
1811          return a = a.replace(ba, ca), function (b) {
1812            return (b.textContent || b.innerText || e(b)).indexOf(a) > -1;
1813          };
1814        }),
1815        lang: ha(function (a) {
1816          return V.test(a || "") || fa.error("unsupported lang: " + a), a = a.replace(ba, ca).toLowerCase(), function (b) {
1817            var c;
1818
1819            do {
1820              if (c = p ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-");
1821            } while ((b = b.parentNode) && 1 === b.nodeType);
1822
1823            return !1;
1824          };
1825        }),
1826        target: function target(b) {
1827          var c = a.location && a.location.hash;
1828          return c && c.slice(1) === b.id;
1829        },
1830        root: function root(a) {
1831          return a === o;
1832        },
1833        focus: function focus(a) {
1834          return a === n.activeElement && (!n.hasFocus || n.hasFocus()) && !!(a.type || a.href || ~a.tabIndex);
1835        },
1836        enabled: function enabled(a) {
1837          return a.disabled === !1;
1838        },
1839        disabled: function disabled(a) {
1840          return a.disabled === !0;
1841        },
1842        checked: function checked(a) {
1843          var b = a.nodeName.toLowerCase();
1844          return "input" === b && !!a.checked || "option" === b && !!a.selected;
1845        },
1846        selected: function selected(a) {
1847          return a.parentNode && a.parentNode.selectedIndex, a.selected === !0;
1848        },
1849        empty: function empty(a) {
1850          for (a = a.firstChild; a; a = a.nextSibling) {
1851            if (a.nodeType < 6) return !1;
1852          }
1853
1854          return !0;
1855        },
1856        parent: function parent(a) {
1857          return !d.pseudos.empty(a);
1858        },
1859        header: function header(a) {
1860          return Y.test(a.nodeName);
1861        },
1862        input: function input(a) {
1863          return X.test(a.nodeName);
1864        },
1865        button: function button(a) {
1866          var b = a.nodeName.toLowerCase();
1867          return "input" === b && "button" === a.type || "button" === b;
1868        },
1869        text: function text(a) {
1870          var b;
1871          return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase());
1872        },
1873        first: na(function () {
1874          return [0];
1875        }),
1876        last: na(function (a, b) {
1877          return [b - 1];
1878        }),
1879        eq: na(function (a, b, c) {
1880          return [0 > c ? c + b : c];
1881        }),
1882        even: na(function (a, b) {
1883          for (var c = 0; b > c; c += 2) {
1884            a.push(c);
1885          }
1886
1887          return a;
1888        }),
1889        odd: na(function (a, b) {
1890          for (var c = 1; b > c; c += 2) {
1891            a.push(c);
1892          }
1893
1894          return a;
1895        }),
1896        lt: na(function (a, b, c) {
1897          for (var d = 0 > c ? c + b : c; --d >= 0;) {
1898            a.push(d);
1899          }
1900
1901          return a;
1902        }),
1903        gt: na(function (a, b, c) {
1904          for (var d = 0 > c ? c + b : c; ++d < b;) {
1905            a.push(d);
1906          }
1907
1908          return a;
1909        })
1910      }
1911    }, d.pseudos.nth = d.pseudos.eq;
1912
1913    for (b in {
1914      radio: !0,
1915      checkbox: !0,
1916      file: !0,
1917      password: !0,
1918      image: !0
1919    }) {
1920      d.pseudos[b] = la(b);
1921    }
1922
1923    for (b in {
1924      submit: !0,
1925      reset: !0
1926    }) {
1927      d.pseudos[b] = ma(b);
1928    }
1929
1930    function pa() {}
1931
1932    pa.prototype = d.filters = d.pseudos, d.setFilters = new pa(), g = fa.tokenize = function (a, b) {
1933      var c,
1934          e,
1935          f,
1936          g,
1937          h,
1938          i,
1939          j,
1940          k = z[a + " "];
1941      if (k) return b ? 0 : k.slice(0);
1942      h = a, i = [], j = d.preFilter;
1943
1944      while (h) {
1945        c && !(e = R.exec(h)) || (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = S.exec(h)) && (c = e.shift(), f.push({
1946          value: c,
1947          type: e[0].replace(Q, " ")
1948        }), h = h.slice(c.length));
1949
1950        for (g in d.filter) {
1951          !(e = W[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
1952            value: c,
1953            type: g,
1954            matches: e
1955          }), h = h.slice(c.length));
1956        }
1957
1958        if (!c) break;
1959      }
1960
1961      return b ? h.length : h ? fa.error(a) : z(a, i).slice(0);
1962    };
1963
1964    function qa(a) {
1965      for (var b = 0, c = a.length, d = ""; c > b; b++) {
1966        d += a[b].value;
1967      }
1968
1969      return d;
1970    }
1971
1972    function ra(a, b, c) {
1973      var d = b.dir,
1974          e = c && "parentNode" === d,
1975          f = x++;
1976      return b.first ? function (b, c, f) {
1977        while (b = b[d]) {
1978          if (1 === b.nodeType || e) return a(b, c, f);
1979        }
1980      } : function (b, c, g) {
1981        var h,
1982            i,
1983            j,
1984            k = [w, f];
1985
1986        if (g) {
1987          while (b = b[d]) {
1988            if ((1 === b.nodeType || e) && a(b, c, g)) return !0;
1989          }
1990        } else while (b = b[d]) {
1991          if (1 === b.nodeType || e) {
1992            if (j = b[u] || (b[u] = {}), i = j[b.uniqueID] || (j[b.uniqueID] = {}), (h = i[d]) && h[0] === w && h[1] === f) return k[2] = h[2];
1993            if (i[d] = k, k[2] = a(b, c, g)) return !0;
1994          }
1995        }
1996      };
1997    }
1998
1999    function sa(a) {
2000      return a.length > 1 ? function (b, c, d) {
2001        var e = a.length;
2002
2003        while (e--) {
2004          if (!a[e](b, c, d)) return !1;
2005        }
2006
2007        return !0;
2008      } : a[0];
2009    }
2010
2011    function ta(a, b, c) {
2012      for (var d = 0, e = b.length; e > d; d++) {
2013        fa(a, b[d], c);
2014      }
2015
2016      return c;
2017    }
2018
2019    function ua(a, b, c, d, e) {
2020      for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++) {
2021        (f = a[h]) && (c && !c(f, d, e) || (g.push(f), j && b.push(h)));
2022      }
2023
2024      return g;
2025    }
2026
2027    function va(a, b, c, d, e, f) {
2028      return d && !d[u] && (d = va(d)), e && !e[u] && (e = va(e, f)), ha(function (f, g, h, i) {
2029        var j,
2030            k,
2031            l,
2032            m = [],
2033            n = [],
2034            o = g.length,
2035            p = f || ta(b || "*", h.nodeType ? [h] : h, []),
2036            q = !a || !f && b ? p : ua(p, m, a, h, i),
2037            r = c ? e || (f ? a : o || d) ? [] : g : q;
2038
2039        if (c && c(q, r, h, i), d) {
2040          j = ua(r, n), d(j, [], h, i), k = j.length;
2041
2042          while (k--) {
2043            (l = j[k]) && (r[n[k]] = !(q[n[k]] = l));
2044          }
2045        }
2046
2047        if (f) {
2048          if (e || a) {
2049            if (e) {
2050              j = [], k = r.length;
2051
2052              while (k--) {
2053                (l = r[k]) && j.push(q[k] = l);
2054              }
2055
2056              e(null, r = [], j, i);
2057            }
2058
2059            k = r.length;
2060
2061            while (k--) {
2062              (l = r[k]) && (j = e ? J(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l));
2063            }
2064          }
2065        } else r = ua(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : H.apply(g, r);
2066      });
2067    }
2068
2069    function wa(a) {
2070      for (var b, c, e, f = a.length, g = d.relative[a[0].type], h = g || d.relative[" "], i = g ? 1 : 0, k = ra(function (a) {
2071        return a === b;
2072      }, h, !0), l = ra(function (a) {
2073        return J(b, a) > -1;
2074      }, h, !0), m = [function (a, c, d) {
2075        var e = !g && (d || c !== j) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d));
2076        return b = null, e;
2077      }]; f > i; i++) {
2078        if (c = d.relative[a[i].type]) m = [ra(sa(m), c)];else {
2079          if (c = d.filter[a[i].type].apply(null, a[i].matches), c[u]) {
2080            for (e = ++i; f > e; e++) {
2081              if (d.relative[a[e].type]) break;
2082            }
2083
2084            return va(i > 1 && sa(m), i > 1 && qa(a.slice(0, i - 1).concat({
2085              value: " " === a[i - 2].type ? "*" : ""
2086            })).replace(Q, "$1"), c, e > i && wa(a.slice(i, e)), f > e && wa(a = a.slice(e)), f > e && qa(a));
2087          }
2088
2089          m.push(c);
2090        }
2091      }
2092
2093      return sa(m);
2094    }
2095
2096    function xa(a, b) {
2097      var c = b.length > 0,
2098          e = a.length > 0,
2099          f = function f(_f, g, h, i, k) {
2100        var l,
2101            o,
2102            q,
2103            r = 0,
2104            s = "0",
2105            t = _f && [],
2106            u = [],
2107            v = j,
2108            x = _f || e && d.find.TAG("*", k),
2109            y = w += null == v ? 1 : Math.random() || .1,
2110            z = x.length;
2111
2112        for (k && (j = g === n || g || k); s !== z && null != (l = x[s]); s++) {
2113          if (e && l) {
2114            o = 0, g || l.ownerDocument === n || (m(l), h = !p);
2115
2116            while (q = a[o++]) {
2117              if (q(l, g || n, h)) {
2118                i.push(l);
2119                break;
2120              }
2121            }
2122
2123            k && (w = y);
2124          }
2125
2126          c && ((l = !q && l) && r--, _f && t.push(l));
2127        }
2128
2129        if (r += s, c && s !== r) {
2130          o = 0;
2131
2132          while (q = b[o++]) {
2133            q(t, u, g, h);
2134          }
2135
2136          if (_f) {
2137            if (r > 0) while (s--) {
2138              t[s] || u[s] || (u[s] = F.call(i));
2139            }
2140            u = ua(u);
2141          }
2142
2143          H.apply(i, u), k && !_f && u.length > 0 && r + b.length > 1 && fa.uniqueSort(i);
2144        }
2145
2146        return k && (w = y, j = v), t;
2147      };
2148
2149      return c ? ha(f) : f;
2150    }
2151
2152    return h = fa.compile = function (a, b) {
2153      var c,
2154          d = [],
2155          e = [],
2156          f = A[a + " "];
2157
2158      if (!f) {
2159        b || (b = g(a)), c = b.length;
2160
2161        while (c--) {
2162          f = wa(b[c]), f[u] ? d.push(f) : e.push(f);
2163        }
2164
2165        f = A(a, xa(e, d)), f.selector = a;
2166      }
2167
2168      return f;
2169    }, i = fa.select = function (a, b, e, f) {
2170      var i,
2171          j,
2172          k,
2173          l,
2174          m,
2175          n = "function" == typeof a && a,
2176          o = !f && g(a = n.selector || a);
2177
2178      if (e = e || [], 1 === o.length) {
2179        if (j = o[0] = o[0].slice(0), j.length > 2 && "ID" === (k = j[0]).type && c.getById && 9 === b.nodeType && p && d.relative[j[1].type]) {
2180          if (b = (d.find.ID(k.matches[0].replace(ba, ca), b) || [])[0], !b) return e;
2181          n && (b = b.parentNode), a = a.slice(j.shift().value.length);
2182        }
2183
2184        i = W.needsContext.test(a) ? 0 : j.length;
2185
2186        while (i--) {
2187          if (k = j[i], d.relative[l = k.type]) break;
2188
2189          if ((m = d.find[l]) && (f = m(k.matches[0].replace(ba, ca), _.test(j[0].type) && oa(b.parentNode) || b))) {
2190            if (j.splice(i, 1), a = f.length && qa(j), !a) return H.apply(e, f), e;
2191            break;
2192          }
2193        }
2194      }
2195
2196      return (n || h(a, o))(f, b, !p, e, !b || _.test(a) && oa(b.parentNode) || b), e;
2197    }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = ia(function (a) {
2198      return 1 & a.compareDocumentPosition(n.createElement("div"));
2199    }), ia(function (a) {
2200      return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href");
2201    }) || ja("type|href|height|width", function (a, b, c) {
2202      return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2);
2203    }), c.attributes && ia(function (a) {
2204      return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value");
2205    }) || ja("value", function (a, b, c) {
2206      return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue;
2207    }), ia(function (a) {
2208      return null == a.getAttribute("disabled");
2209    }) || ja(K, function (a, b, c) {
2210      var d;
2211      return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null;
2212    }), fa;
2213  }(a);
2214
2215  n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.uniqueSort = n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
2216
2217  var u = function u(a, b, c) {
2218    var d = [],
2219        e = void 0 !== c;
2220
2221    while ((a = a[b]) && 9 !== a.nodeType) {
2222      if (1 === a.nodeType) {
2223        if (e && n(a).is(c)) break;
2224        d.push(a);
2225      }
2226    }
2227
2228    return d;
2229  },
2230      v = function v(a, b) {
2231    for (var c = []; a; a = a.nextSibling) {
2232      1 === a.nodeType && a !== b && c.push(a);
2233    }
2234
2235    return c;
2236  },
2237      w = n.expr.match.needsContext,
2238      x = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,
2239      y = /^.[^:#\[\.,]*$/;
2240
2241  function z(a, b, c) {
2242    if (n.isFunction(b)) return n.grep(a, function (a, d) {
2243      return !!b.call(a, d, a) !== c;
2244    });
2245    if (b.nodeType) return n.grep(a, function (a) {
2246      return a === b !== c;
2247    });
2248
2249    if ("string" == typeof b) {
2250      if (y.test(b)) return n.filter(b, a, c);
2251      b = n.filter(b, a);
2252    }
2253
2254    return n.grep(a, function (a) {
2255      return n.inArray(a, b) > -1 !== c;
2256    });
2257  }
2258
2259  n.filter = function (a, b, c) {
2260    var d = b[0];
2261    return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function (a) {
2262      return 1 === a.nodeType;
2263    }));
2264  }, n.fn.extend({
2265    find: function find(a) {
2266      var b,
2267          c = [],
2268          d = this,
2269          e = d.length;
2270      if ("string" != typeof a) return this.pushStack(n(a).filter(function () {
2271        for (b = 0; e > b; b++) {
2272          if (n.contains(d[b], this)) return !0;
2273        }
2274      }));
2275
2276      for (b = 0; e > b; b++) {
2277        n.find(a, d[b], c);
2278      }
2279
2280      return c = this.pushStack(e > 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c;
2281    },
2282    filter: function filter(a) {
2283      return this.pushStack(z(this, a || [], !1));
2284    },
2285    not: function not(a) {
2286      return this.pushStack(z(this, a || [], !0));
2287    },
2288    is: function is(a) {
2289      return !!z(this, "string" == typeof a && w.test(a) ? n(a) : a || [], !1).length;
2290    }
2291  });
2292
2293  var A,
2294      B = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
2295      C = n.fn.init = function (a, b, c) {
2296    var e, f;
2297    if (!a) return this;
2298
2299    if (c = c || A, "string" == typeof a) {
2300      if (e = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : B.exec(a), !e || !e[1] && b) return !b || b.jquery ? (b || c).find(a) : this.constructor(b).find(a);
2301
2302      if (e[1]) {
2303        if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(e[1], b && b.nodeType ? b.ownerDocument || b : d, !0)), x.test(e[1]) && n.isPlainObject(b)) for (e in b) {
2304          n.isFunction(this[e]) ? this[e](b[e]) : this.attr(e, b[e]);
2305        }
2306        return this;
2307      }
2308
2309      if (f = d.getElementById(e[2]), f && f.parentNode) {
2310        if (f.id !== e[2]) return A.find(a);
2311        this.length = 1, this[0] = f;
2312      }
2313
2314      return this.context = d, this.selector = a, this;
2315    }
2316
2317    return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof c.ready ? c.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this));
2318  };
2319
2320  C.prototype = n.fn, A = n(d);
2321  var D = /^(?:parents|prev(?:Until|All))/,
2322      E = {
2323    children: !0,
2324    contents: !0,
2325    next: !0,
2326    prev: !0
2327  };
2328  n.fn.extend({
2329    has: function has(a) {
2330      var b,
2331          c = n(a, this),
2332          d = c.length;
2333      return this.filter(function () {
2334        for (b = 0; d > b; b++) {
2335          if (n.contains(this, c[b])) return !0;
2336        }
2337      });
2338    },
2339    closest: function closest(a, b) {
2340      for (var c, d = 0, e = this.length, f = [], g = w.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++) {
2341        for (c = this[d]; c && c !== b; c = c.parentNode) {
2342          if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) {
2343            f.push(c);
2344            break;
2345          }
2346        }
2347      }
2348
2349      return this.pushStack(f.length > 1 ? n.uniqueSort(f) : f);
2350    },
2351    index: function index(a) {
2352      return a ? "string" == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
2353    },
2354    add: function add(a, b) {
2355      return this.pushStack(n.uniqueSort(n.merge(this.get(), n(a, b))));
2356    },
2357    addBack: function addBack(a) {
2358      return this.add(null == a ? this.prevObject : this.prevObject.filter(a));
2359    }
2360  });
2361
2362  function F(a, b) {
2363    do {
2364      a = a[b];
2365    } while (a && 1 !== a.nodeType);
2366
2367    return a;
2368  }
2369
2370  n.each({
2371    parent: function parent(a) {
2372      var b = a.parentNode;
2373      return b && 11 !== b.nodeType ? b : null;
2374    },
2375    parents: function parents(a) {
2376      return u(a, "parentNode");
2377    },
2378    parentsUntil: function parentsUntil(a, b, c) {
2379      return u(a, "parentNode", c);
2380    },
2381    next: function next(a) {
2382      return F(a, "nextSibling");
2383    },
2384    prev: function prev(a) {
2385      return F(a, "previousSibling");
2386    },
2387    nextAll: function nextAll(a) {
2388      return u(a, "nextSibling");
2389    },
2390    prevAll: function prevAll(a) {
2391      return u(a, "previousSibling");
2392    },
2393    nextUntil: function nextUntil(a, b, c) {
2394      return u(a, "nextSibling", c);
2395    },
2396    prevUntil: function prevUntil(a, b, c) {
2397      return u(a, "previousSibling", c);
2398    },
2399    siblings: function siblings(a) {
2400      return v((a.parentNode || {}).firstChild, a);
2401    },
2402    children: function children(a) {
2403      return v(a.firstChild);
2404    },
2405    contents: function contents(a) {
2406      return n.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes);
2407    }
2408  }, function (a, b) {
2409    n.fn[a] = function (c, d) {
2410      var e = n.map(this, b, c);
2411      return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (E[a] || (e = n.uniqueSort(e)), D.test(a) && (e = e.reverse())), this.pushStack(e);
2412    };
2413  });
2414  var G = /\S+/g;
2415
2416  function H(a) {
2417    var b = {};
2418    return n.each(a.match(G) || [], function (a, c) {
2419      b[c] = !0;
2420    }), b;
2421  }
2422
2423  n.Callbacks = function (a) {
2424    a = "string" == typeof a ? H(a) : n.extend({}, a);
2425
2426    var b,
2427        c,
2428        d,
2429        e,
2430        f = [],
2431        g = [],
2432        h = -1,
2433        i = function i() {
2434      for (e = a.once, d = b = !0; g.length; h = -1) {
2435        c = g.shift();
2436
2437        while (++h < f.length) {
2438          f[h].apply(c[0], c[1]) === !1 && a.stopOnFalse && (h = f.length, c = !1);
2439        }
2440      }
2441
2442      a.memory || (c = !1), b = !1, e && (f = c ? [] : "");
2443    },
2444        j = {
2445      add: function add() {
2446        return f && (c && !b && (h = f.length - 1, g.push(c)), function d(b) {
2447          n.each(b, function (b, c) {
2448            n.isFunction(c) ? a.unique && j.has(c) || f.push(c) : c && c.length && "string" !== n.type(c) && d(c);
2449          });
2450        }(arguments), c && !b && i()), this;
2451      },
2452      remove: function remove() {
2453        return n.each(arguments, function (a, b) {
2454          var c;
2455
2456          while ((c = n.inArray(b, f, c)) > -1) {
2457            f.splice(c, 1), h >= c && h--;
2458          }
2459        }), this;
2460      },
2461      has: function has(a) {
2462        return a ? n.inArray(a, f) > -1 : f.length > 0;
2463      },
2464      empty: function empty() {
2465        return f && (f = []), this;
2466      },
2467      disable: function disable() {
2468        return e = g = [], f = c = "", this;
2469      },
2470      disabled: function disabled() {
2471        return !f;
2472      },
2473      lock: function lock() {
2474        return e = !0, c || j.disable(), this;
2475      },
2476      locked: function locked() {
2477        return !!e;
2478      },
2479      fireWith: function fireWith(a, c) {
2480        return e || (c = c || [], c = [a, c.slice ? c.slice() : c], g.push(c), b || i()), this;
2481      },
2482      fire: function fire() {
2483        return j.fireWith(this, arguments), this;
2484      },
2485      fired: function fired() {
2486        return !!d;
2487      }
2488    };
2489
2490    return j;
2491  }, n.extend({
2492    Deferred: function Deferred(a) {
2493      var b = [["resolve", "done", n.Callbacks("once memory"), "resolved"], ["reject", "fail", n.Callbacks("once memory"), "rejected"], ["notify", "progress", n.Callbacks("memory")]],
2494          c = "pending",
2495          d = {
2496        state: function state() {
2497          return c;
2498        },
2499        always: function always() {
2500          return e.done(arguments).fail(arguments), this;
2501        },
2502        then: function then() {
2503          var a = arguments;
2504          return n.Deferred(function (c) {
2505            n.each(b, function (b, f) {
2506              var g = n.isFunction(a[b]) && a[b];
2507              e[f[1]](function () {
2508                var a = g && g.apply(this, arguments);
2509                a && n.isFunction(a.promise) ? a.promise().progress(c.notify).done(c.resolve).fail(c.reject) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments);
2510              });
2511            }), a = null;
2512          }).promise();
2513        },
2514        promise: function promise(a) {
2515          return null != a ? n.extend(a, d) : d;
2516        }
2517      },
2518          e = {};
2519      return d.pipe = d.then, n.each(b, function (a, f) {
2520        var g = f[2],
2521            h = f[3];
2522        d[f[1]] = g.add, h && g.add(function () {
2523          c = h;
2524        }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
2525          return e[f[0] + "With"](this === e ? d : this, arguments), this;
2526        }, e[f[0] + "With"] = g.fireWith;
2527      }), d.promise(e), a && a.call(e, e), e;
2528    },
2529    when: function when(a) {
2530      var b = 0,
2531          c = e.call(arguments),
2532          d = c.length,
2533          f = 1 !== d || a && n.isFunction(a.promise) ? d : 0,
2534          g = 1 === f ? a : n.Deferred(),
2535          h = function h(a, b, c) {
2536        return function (d) {
2537          b[a] = this, c[a] = arguments.length > 1 ? e.call(arguments) : d, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c);
2538        };
2539      },
2540          i,
2541          j,
2542          k;
2543
2544      if (d > 1) for (i = new Array(d), j = new Array(d), k = new Array(d); d > b; b++) {
2545        c[b] && n.isFunction(c[b].promise) ? c[b].promise().progress(h(b, j, i)).done(h(b, k, c)).fail(g.reject) : --f;
2546      }
2547      return f || g.resolveWith(k, c), g.promise();
2548    }
2549  });
2550  var I;
2551  n.fn.ready = function (a) {
2552    return n.ready.promise().done(a), this;
2553  }, n.extend({
2554    isReady: !1,
2555    readyWait: 1,
2556    holdReady: function holdReady(a) {
2557      a ? n.readyWait++ : n.ready(!0);
2558    },
2559    ready: function ready(a) {
2560      (a === !0 ? --n.readyWait : n.isReady) || (n.isReady = !0, a !== !0 && --n.readyWait > 0 || (I.resolveWith(d, [n]), n.fn.triggerHandler && (n(d).triggerHandler("ready"), n(d).off("ready"))));
2561    }
2562  });
2563
2564  function J() {
2565    d.addEventListener ? (d.removeEventListener("DOMContentLoaded", K), a.removeEventListener("load", K)) : (d.detachEvent("onreadystatechange", K), a.detachEvent("onload", K));
2566  }
2567
2568  function K() {
2569    (d.addEventListener || "load" === a.event.type || "complete" === d.readyState) && (J(), n.ready());
2570  }
2571
2572  n.ready.promise = function (b) {
2573    if (!I) if (I = n.Deferred(), "complete" === d.readyState || "loading" !== d.readyState && !d.documentElement.doScroll) a.setTimeout(n.ready);else if (d.addEventListener) d.addEventListener("DOMContentLoaded", K), a.addEventListener("load", K);else {
2574      d.attachEvent("onreadystatechange", K), a.attachEvent("onload", K);
2575      var c = !1;
2576
2577      try {
2578        c = null == a.frameElement && d.documentElement;
2579      } catch (e) {}
2580
2581      c && c.doScroll && !function f() {
2582        if (!n.isReady) {
2583          try {
2584            c.doScroll("left");
2585          } catch (b) {
2586            return a.setTimeout(f, 50);
2587          }
2588
2589          J(), n.ready();
2590        }
2591      }();
2592    }
2593    return I.promise(b);
2594  }, n.ready.promise();
2595  var L;
2596
2597  for (L in n(l)) {
2598    break;
2599  }
2600
2601  l.ownFirst = "0" === L, l.inlineBlockNeedsLayout = !1, n(function () {
2602    var a, b, c, e;
2603    c = d.getElementsByTagName("body")[0], c && c.style && (b = d.createElement("div"), e = d.createElement("div"), e.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(e).appendChild(b), "undefined" != typeof b.style.zoom && (b.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", l.inlineBlockNeedsLayout = a = 3 === b.offsetWidth, a && (c.style.zoom = 1)), c.removeChild(e));
2604  }), function () {
2605    var a = d.createElement("div");
2606    l.deleteExpando = !0;
2607
2608    try {
2609      delete a.test;
2610    } catch (b) {
2611      l.deleteExpando = !1;
2612    }
2613
2614    a = null;
2615  }();
2616
2617  var M = function M(a) {
2618    var b = n.noData[(a.nodeName + " ").toLowerCase()],
2619        c = +a.nodeType || 1;
2620    return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b;
2621  },
2622      N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
2623      O = /([A-Z])/g;
2624
2625  function P(a, b, c) {
2626    if (void 0 === c && 1 === a.nodeType) {
2627      var d = "data-" + b.replace(O, "-$1").toLowerCase();
2628
2629      if (c = a.getAttribute(d), "string" == typeof c) {
2630        try {
2631          c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c;
2632        } catch (e) {}
2633
2634        n.data(a, b, c);
2635      } else c = void 0;
2636    }
2637
2638    return c;
2639  }
2640
2641  function Q(a) {
2642    var b;
2643
2644    for (b in a) {
2645      if (("data" !== b || !n.isEmptyObject(a[b])) && "toJSON" !== b) return !1;
2646    }
2647
2648    return !0;
2649  }
2650
2651  function R(a, b, d, e) {
2652    if (M(a)) {
2653      var f,
2654          g,
2655          h = n.expando,
2656          i = a.nodeType,
2657          j = i ? n.cache : a,
2658          k = i ? a[h] : a[h] && h;
2659      if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b) return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : {
2660        toJSON: n.noop
2661      }), "object" != _typeof(b) && "function" != typeof b || (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[n.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[n.camelCase(b)])) : f = g, f;
2662    }
2663  }
2664
2665  function S(a, b, c) {
2666    if (M(a)) {
2667      var d,
2668          e,
2669          f = a.nodeType,
2670          g = f ? n.cache : a,
2671          h = f ? a[n.expando] : n.expando;
2672
2673      if (g[h]) {
2674        if (b && (d = c ? g[h] : g[h].data)) {
2675          n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
2676
2677          while (e--) {
2678            delete d[b[e]];
2679          }
2680
2681          if (c ? !Q(d) : !n.isEmptyObject(d)) return;
2682        }
2683
2684        (c || (delete g[h].data, Q(g[h]))) && (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = void 0);
2685      }
2686    }
2687  }
2688
2689  n.extend({
2690    cache: {},
2691    noData: {
2692      "applet ": !0,
2693      "embed ": !0,
2694      "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
2695    },
2696    hasData: function hasData(a) {
2697      return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a && !Q(a);
2698    },
2699    data: function data(a, b, c) {
2700      return R(a, b, c);
2701    },
2702    removeData: function removeData(a, b) {
2703      return S(a, b);
2704    },
2705    _data: function _data(a, b, c) {
2706      return R(a, b, c, !0);
2707    },
2708    _removeData: function _removeData(a, b) {
2709      return S(a, b, !0);
2710    }
2711  }), n.fn.extend({
2712    data: function data(a, b) {
2713      var c,
2714          d,
2715          e,
2716          f = this[0],
2717          g = f && f.attributes;
2718
2719      if (void 0 === a) {
2720        if (this.length && (e = n.data(f), 1 === f.nodeType && !n._data(f, "parsedAttrs"))) {
2721          c = g.length;
2722
2723          while (c--) {
2724            g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d])));
2725          }
2726
2727          n._data(f, "parsedAttrs", !0);
2728        }
2729
2730        return e;
2731      }
2732
2733      return "object" == _typeof(a) ? this.each(function () {
2734        n.data(this, a);
2735      }) : arguments.length > 1 ? this.each(function () {
2736        n.data(this, a, b);
2737      }) : f ? P(f, a, n.data(f, a)) : void 0;
2738    },
2739    removeData: function removeData(a) {
2740      return this.each(function () {
2741        n.removeData(this, a);
2742      });
2743    }
2744  }), n.extend({
2745    queue: function queue(a, b, c) {
2746      var d;
2747      return a ? (b = (b || "fx") + "queue", d = n._data(a, b), c && (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0;
2748    },
2749    dequeue: function dequeue(a, b) {
2750      b = b || "fx";
2751
2752      var c = n.queue(a, b),
2753          d = c.length,
2754          e = c.shift(),
2755          f = n._queueHooks(a, b),
2756          g = function g() {
2757        n.dequeue(a, b);
2758      };
2759
2760      "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire();
2761    },
2762    _queueHooks: function _queueHooks(a, b) {
2763      var c = b + "queueHooks";
2764      return n._data(a, c) || n._data(a, c, {
2765        empty: n.Callbacks("once memory").add(function () {
2766          n._removeData(a, b + "queue"), n._removeData(a, c);
2767        })
2768      });
2769    }
2770  }), n.fn.extend({
2771    queue: function queue(a, b) {
2772      var c = 2;
2773      return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function () {
2774        var c = n.queue(this, a, b);
2775        n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a);
2776      });
2777    },
2778    dequeue: function dequeue(a) {
2779      return this.each(function () {
2780        n.dequeue(this, a);
2781      });
2782    },
2783    clearQueue: function clearQueue(a) {
2784      return this.queue(a || "fx", []);
2785    },
2786    promise: function promise(a, b) {
2787      var c,
2788          d = 1,
2789          e = n.Deferred(),
2790          f = this,
2791          g = this.length,
2792          h = function h() {
2793        --d || e.resolveWith(f, [f]);
2794      };
2795
2796      "string" != typeof a && (b = a, a = void 0), a = a || "fx";
2797
2798      while (g--) {
2799        c = n._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
2800      }
2801
2802      return h(), e.promise(b);
2803    }
2804  }), function () {
2805    var a;
2806
2807    l.shrinkWrapBlocks = function () {
2808      if (null != a) return a;
2809      a = !1;
2810      var b, c, e;
2811      return c = d.getElementsByTagName("body")[0], c && c.style ? (b = d.createElement("div"), e = d.createElement("div"), e.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(e).appendChild(b), "undefined" != typeof b.style.zoom && (b.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", b.appendChild(d.createElement("div")).style.width = "5px", a = 3 !== b.offsetWidth), c.removeChild(e), a) : void 0;
2812    };
2813  }();
2814
2815  var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
2816      U = new RegExp("^(?:([+-])=|)(" + T + ")([a-z%]*)$", "i"),
2817      V = ["Top", "Right", "Bottom", "Left"],
2818      W = function W(a, b) {
2819    return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a);
2820  };
2821
2822  function X(a, b, c, d) {
2823    var e,
2824        f = 1,
2825        g = 20,
2826        h = d ? function () {
2827      return d.cur();
2828    } : function () {
2829      return n.css(a, b, "");
2830    },
2831        i = h(),
2832        j = c && c[3] || (n.cssNumber[b] ? "" : "px"),
2833        k = (n.cssNumber[b] || "px" !== j && +i) && U.exec(n.css(a, b));
2834
2835    if (k && k[3] !== j) {
2836      j = j || k[3], c = c || [], k = +i || 1;
2837
2838      do {
2839        f = f || ".5", k /= f, n.style(a, b, k + j);
2840      } while (f !== (f = h() / i) && 1 !== f && --g);
2841    }
2842
2843    return c && (k = +k || +i || 0, e = c[1] ? k + (c[1] + 1) * c[2] : +c[2], d && (d.unit = j, d.start = k, d.end = e)), e;
2844  }
2845
2846  var Y = function Y(a, b, c, d, e, f, g) {
2847    var h = 0,
2848        i = a.length,
2849        j = null == c;
2850
2851    if ("object" === n.type(c)) {
2852      e = !0;
2853
2854      for (h in c) {
2855        Y(a, b, h, c[h], !0, f, g);
2856      }
2857    } else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function b(a, _b2, c) {
2858      return j.call(n(a), c);
2859    })), b)) for (; i > h; h++) {
2860      b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
2861    }
2862
2863    return e ? a : j ? b.call(a) : i ? b(a[0], c) : f;
2864  },
2865      Z = /^(?:checkbox|radio)$/i,
2866      $ = /<([\w:-]+)/,
2867      _ = /^$|\/(?:java|ecma)script/i,
2868      aa = /^\s+/,
2869      ba = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";
2870
2871  function ca(a) {
2872    var b = ba.split("|"),
2873        c = a.createDocumentFragment();
2874    if (c.createElement) while (b.length) {
2875      c.createElement(b.pop());
2876    }
2877    return c;
2878  }
2879
2880  !function () {
2881    var a = d.createElement("div"),
2882        b = d.createDocumentFragment(),
2883        c = d.createElement("input");
2884    a.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", l.leadingWhitespace = 3 === a.firstChild.nodeType, l.tbody = !a.getElementsByTagName("tbody").length, l.htmlSerialize = !!a.getElementsByTagName("link").length, l.html5Clone = "<:nav></:nav>" !== d.createElement("nav").cloneNode(!0).outerHTML, c.type = "checkbox", c.checked = !0, b.appendChild(c), l.appendChecked = c.checked, a.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!a.cloneNode(!0).lastChild.defaultValue, b.appendChild(a), c = d.createElement("input"), c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), a.appendChild(c), l.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !!a.addEventListener, a[n.expando] = 1, l.attributes = !a.getAttribute(n.expando);
2885  }();
2886  var da = {
2887    option: [1, "<select multiple='multiple'>", "</select>"],
2888    legend: [1, "<fieldset>", "</fieldset>"],
2889    area: [1, "<map>", "</map>"],
2890    param: [1, "<object>", "</object>"],
2891    thead: [1, "<table>", "</table>"],
2892    tr: [2, "<table><tbody>", "</tbody></table>"],
2893    col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
2894    td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
2895    _default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
2896  };
2897  da.optgroup = da.option, da.tbody = da.tfoot = da.colgroup = da.caption = da.thead, da.th = da.td;
2898
2899  function ea(a, b) {
2900    var c,
2901        d,
2902        e = 0,
2903        f = "undefined" != typeof a.getElementsByTagName ? a.getElementsByTagName(b || "*") : "undefined" != typeof a.querySelectorAll ? a.querySelectorAll(b || "*") : void 0;
2904    if (!f) for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) {
2905      !b || n.nodeName(d, b) ? f.push(d) : n.merge(f, ea(d, b));
2906    }
2907    return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f;
2908  }
2909
2910  function fa(a, b) {
2911    for (var c, d = 0; null != (c = a[d]); d++) {
2912      n._data(c, "globalEval", !b || n._data(b[d], "globalEval"));
2913    }
2914  }
2915
2916  var ga = /<|&#?\w+;/,
2917      ha = /<tbody/i;
2918
2919  function ia(a) {
2920    Z.test(a.type) && (a.defaultChecked = a.checked);
2921  }
2922
2923  function ja(a, b, c, d, e) {
2924    for (var f, g, h, i, j, k, m, o = a.length, p = ca(b), q = [], r = 0; o > r; r++) {
2925      if (g = a[r], g || 0 === g) if ("object" === n.type(g)) n.merge(q, g.nodeType ? [g] : g);else if (ga.test(g)) {
2926        i = i || p.appendChild(b.createElement("div")), j = ($.exec(g) || ["", ""])[1].toLowerCase(), m = da[j] || da._default, i.innerHTML = m[1] + n.htmlPrefilter(g) + m[2], f = m[0];
2927
2928        while (f--) {
2929          i = i.lastChild;
2930        }
2931
2932        if (!l.leadingWhitespace && aa.test(g) && q.push(b.createTextNode(aa.exec(g)[0])), !l.tbody) {
2933          g = "table" !== j || ha.test(g) ? "<table>" !== m[1] || ha.test(g) ? 0 : i : i.firstChild, f = g && g.childNodes.length;
2934
2935          while (f--) {
2936            n.nodeName(k = g.childNodes[f], "tbody") && !k.childNodes.length && g.removeChild(k);
2937          }
2938        }
2939
2940        n.merge(q, i.childNodes), i.textContent = "";
2941
2942        while (i.firstChild) {
2943          i.removeChild(i.firstChild);
2944        }
2945
2946        i = p.lastChild;
2947      } else q.push(b.createTextNode(g));
2948    }
2949
2950    i && p.removeChild(i), l.appendChecked || n.grep(ea(q, "input"), ia), r = 0;
2951
2952    while (g = q[r++]) {
2953      if (d && n.inArray(g, d) > -1) e && e.push(g);else if (h = n.contains(g.ownerDocument, g), i = ea(p.appendChild(g), "script"), h && fa(i), c) {
2954        f = 0;
2955
2956        while (g = i[f++]) {
2957          _.test(g.type || "") && c.push(g);
2958        }
2959      }
2960    }
2961
2962    return i = null, p;
2963  }
2964
2965  !function () {
2966    var b,
2967        c,
2968        e = d.createElement("div");
2969
2970    for (b in {
2971      submit: !0,
2972      change: !0,
2973      focusin: !0
2974    }) {
2975      c = "on" + b, (l[b] = c in a) || (e.setAttribute(c, "t"), l[b] = e.attributes[c].expando === !1);
2976    }
2977
2978    e = null;
2979  }();
2980  var ka = /^(?:input|select|textarea)$/i,
2981      la = /^key/,
2982      ma = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
2983      na = /^(?:focusinfocus|focusoutblur)$/,
2984      oa = /^([^.]*)(?:\.(.+)|)/;
2985
2986  function pa() {
2987    return !0;
2988  }
2989
2990  function qa() {
2991    return !1;
2992  }
2993
2994  function ra() {
2995    try {
2996      return d.activeElement;
2997    } catch (a) {}
2998  }
2999
3000  function sa(a, b, c, d, e, f) {
3001    var g, h;
3002
3003    if ("object" == _typeof(b)) {
3004      "string" != typeof c && (d = d || c, c = void 0);
3005
3006      for (h in b) {
3007        sa(a, h, c, d, b[h], f);
3008      }
3009
3010      return a;
3011    }
3012
3013    if (null == d && null == e ? (e = c, d = c = void 0) : null == e && ("string" == typeof c ? (e = d, d = void 0) : (e = d, d = c, c = void 0)), e === !1) e = qa;else if (!e) return a;
3014    return 1 === f && (g = e, e = function e(a) {
3015      return n().off(a), g.apply(this, arguments);
3016    }, e.guid = g.guid || (g.guid = n.guid++)), a.each(function () {
3017      n.event.add(this, b, e, d, c);
3018    });
3019  }
3020
3021  n.event = {
3022    global: {},
3023    add: function add(a, b, c, d, e) {
3024      var f,
3025          g,
3026          h,
3027          i,
3028          j,
3029          k,
3030          l,
3031          m,
3032          o,
3033          p,
3034          q,
3035          r = n._data(a);
3036
3037      if (r) {
3038        c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) {
3039          return "undefined" == typeof n || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments);
3040        }, k.elem = a), b = (b || "").match(G) || [""], h = b.length;
3041
3042        while (h--) {
3043          f = oa.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({
3044            type: o,
3045            origType: q,
3046            data: d,
3047            handler: c,
3048            guid: c.guid,
3049            selector: e,
3050            needsContext: e && n.expr.match.needsContext.test(e),
3051            namespace: p.join(".")
3052          }, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0);
3053        }
3054
3055        a = null;
3056      }
3057    },
3058    remove: function remove(a, b, c, d, e) {
3059      var f,
3060          g,
3061          h,
3062          i,
3063          j,
3064          k,
3065          l,
3066          m,
3067          o,
3068          p,
3069          q,
3070          r = n.hasData(a) && n._data(a);
3071
3072      if (r && (k = r.events)) {
3073        b = (b || "").match(G) || [""], j = b.length;
3074
3075        while (j--) {
3076          if (h = oa.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
3077            l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h 
3077= h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length;
3078
3079            while (f--) {
3080              g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
3081            }
3082
3083            i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o]);
3084          } else for (o in k) {
3085            n.event.remove(a, o + b[j], c, d, !0);
3086          }
3087        }
3088
3089        n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events"));
3090      }
3091    },
3092    trigger: function trigger(b, c, e, f) {
3093      var g,
3094          h,
3095          i,
3096          j,
3097          l,
3098          m,
3099          o,
3100          p = [e || d],
3101          q = k.call(b, "type") ? b.type : b,
3102          r = k.call(b, "namespace") ? b.namespace.split(".") : [];
3103
3104      if (i = m = e = e || d, 3 !== e.nodeType && 8 !== e.nodeType && !na.test(q + n.event.triggered) && (q.indexOf(".") > -1 && (r = q.split("."), q = r.shift(), r.sort()), h = q.indexOf(":") < 0 && "on" + q, b = b[n.expando] ? b : new n.Event(q, "object" == _typeof(b) && b), b.isTrigger = f ? 2 : 3, b.namespace = r.join("."), b.rnamespace = b.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = e), c = null == c ? [b] : n.makeArray(c, [b]), l = n.event.special[q] || {}, f || !l.trigger || l.trigger.apply(e, c) !== !1)) {
3105        if (!f && !l.noBubble && !n.isWindow(e)) {
3106          for (j = l.delegateType || q, na.test(j + q) || (i = i.parentNode); i; i = i.parentNode) {
3107            p.push(i), m = i;
3108          }
3109
3110          m === (e.ownerDocument || d) && p.push(m.defaultView || m.parentWindow || a);
3111        }
3112
3113        o = 0;
3114
3115        while ((i = p[o++]) && !b.isPropagationStopped()) {
3116          b.type = o > 1 ? j : l.bindType || q, g = (n._data(i, "events") || {})[b.type] && n._data(i, "handle"), g && g.apply(i, c), g = h && i[h], g && g.apply && M(i) && (b.result = g.apply(i, c), b.result === !1 && b.preventDefault());
3117        }
3118
3119        if (b.type = q, !f && !b.isDefaultPrevented() && (!l._default || l._default.apply(p.pop(), c) === !1) && M(e) && h && e[q] && !n.isWindow(e)) {
3120          m = e[h], m && (e[h] = null), n.event.triggered = q;
3121
3122          try {
3123            e[q]();
3124          } catch (s) {}
3125
3126          n.event.triggered = void 0, m && (e[h] = m);
3127        }
3128
3129        return b.result;
3130      }
3131    },
3132    dispatch: function dispatch(a) {
3133      a = n.event.fix(a);
3134      var b,
3135          c,
3136          d,
3137          f,
3138          g,
3139          h = [],
3140          i = e.call(arguments),
3141          j = (n._data(this, "events") || {})[a.type] || [],
3142          k = n.event.special[a.type] || {};
3143
3144      if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
3145        h = n.event.handlers.call(this, a, j), b = 0;
3146
3147        while ((f = h[b++]) && !a.isPropagationStopped()) {
3148          a.currentTarget = f.elem, c = 0;
3149
3150          while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) {
3151            a.rnamespace && !a.rnamespace.test(g.namespace) || (a.handleObj = g, a.data = g.data, d = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== d && (a.result = d) === !1 && (a.preventDefault(), a.stopPropagation()));
3152          }
3153        }
3154
3155        return k.postDispatch && k.postDispatch.call(this, a), a.result;
3156      }
3157    },
3158    handlers: function handlers(a, b) {
3159      var c,
3160          d,
3161          e,
3162          f,
3163          g = [],
3164          h = b.delegateCount,
3165          i = a.target;
3166      if (h && i.nodeType && ("click" !== a.type || isNaN(a.button) || a.button < 1)) for (; i != this; i = i.parentNode || this) {
3167        if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) {
3168          for (d = [], c = 0; h > c; c++) {
3169            f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? n(e, this).index(i) > -1 : n.find(e, this, null, [i]).length), d[e] && d.push(f);
3170          }
3171
3172          d.length && g.push({
3173            elem: i,
3174            handlers: d
3175          });
3176        }
3177      }
3178      return h < b.length && g.push({
3179        elem: this,
3180        handlers: b.slice(h)
3181      }), g;
3182    },
3183    fix: function fix(a) {
3184      if (a[n.expando]) return a;
3185      var b,
3186          c,
3187          e,
3188          f = a.type,
3189          g = a,
3190          h = this.fixHooks[f];
3191      h || (this.fixHooks[f] = h = ma.test(f) ? this.mouseHooks : la.test(f) ? this.keyHooks 
3191: {}), e = h.props ? this.props.concat(h.props) : this.props, a = new n.Event(g), b = e.length;
3192
3193      while (b--) {
3194        c = e[b], a[c] = g[c];
3195      }
3196
3197      return a.target || (a.target = g.srcElement || d), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, h.filter ? h.filter(a, g) : a;
3198    },
3199    props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
3200    fixHooks: {},
3201    keyHooks: {
3202      props: "char charCode key keyCode".split(" "),
3203      filter: function filter(a, b) {
3204        return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a;
3205      }
3206    },
3207    mouseHooks: {
3208      props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
3209      filter: function filter(a, b) {
3210        var c,
3211            e,
3212            f,
3213            g = b.button,
3214            h = b.fromElement;
3215        return null == a.pageX && null != b.clientX && (e = a.target.ownerDocument || d, f = e.documentElement, c = e.body, a.pageX = b.clientX + (f && f.scrollLeft || c && c.scrollLeft || 0) - (f && f.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (f && f.scrollTop || c && c.scrollTop || 0) - (f && f.clientTop || c && c.clientTop || 0)), !a.relatedTarget && h && (a.relatedTarget = h === a.target ? b.toElement : h), a.which || void 0 === g || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0), a;
3216      }
3217    },
3218    special: {
3219      load: {
3220        noBubble: !0
3221      },
3222      focus: {
3223        trigger: function trigger() {
3224          if (this !== ra() && this.focus) try {
3225            return this.focus(), !1;
3226          } catch (a) {}
3227        },
3228        delegateType: "focusin"
3229      },
3230      blur: {
3231        trigger: function trigger() {
3232          return this === ra() && this.blur ? (this.blur(), !1) : void 0;
3233        },
3234        delegateType: "focusout"
3235      },
3236      click: {
3237        trigger: function trigger() {
3238          return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0;
3239        },
3240        _default: function _default(a) {
3241          return n.nodeName(a.target, "a");
3242        }
3243      },
3244      beforeunload: {
3245        postDispatch: function postDispatch(a) {
3246          void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result);
3247        }
3248      }
3249    },
3250    simulate: function simulate(a, b, c) {
3251      var d = n.extend(new n.Event(), c, {
3252        type: a,
3253        isSimulated: !0
3254      });
3255      n.event.trigger(d, null, b), d.isDefaultPrevented() && c.preventDefault();
3256    }
3257  }, n.removeEvent = d.removeEventListener ? function (a, b, c) {
3258    a.removeEventListener && a.removeEventListener(b, c);
3259  } : function (a, b, c) {
3260    var d = "on" + b;
3261    a.detachEvent && ("undefined" == typeof a[d] && (a[d] = null), a.detachEvent(d, c));
3262  }, n.Event = function (a, b) {
3263    return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? pa : qa) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void (this[n.expando] = !0)) : new n.Event(a, b);
3264  }, n.Event.prototype = {
3265    constructor: n.Event,
3266    isDefaultPrevented: qa,
3267    isPropagationStopped: qa,
3268    isImmediatePropagationStopped: qa,
3269    preventDefault: function preventDefault() {
3270      var a = this.originalEvent;
3271      this.isDefaultPrevented = pa, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1);
3272    },
3273    stopPropagation: function stopPropagation() {
3274      var a = this.originalEvent;
3275      this.isPropagationStopped = pa, a && !this.isSimulated && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0);
3276    },
3277    stopImmediatePropagation: function stopImmediatePropagation() {
3278      var a = this.originalEvent;
3279      this.isImmediatePropagationStopped = pa, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation();
3280    }
3281  }, n.each({
3282    mouseenter: "mouseover",
3283    mouseleave: "mouseout",
3284    pointerenter: "pointerover",
3285    pointerleave: "pointerout"
3286  }, function (a, b) {
3287    n.event.special[a] = {
3288      delegateType: b,
3289      bindType: b,
3290      handle: function handle(a) {
3291        var c,
3292            d = this,
3293            e = a.relatedTarget,
3294            f = a.handleObj;
3295        return e && (e === d || n.contains(d, e)) || (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c;
3296      }
3297    };
3298  }), l.submit || (n.event.special.submit = {
3299    setup: function setup() {
3300      return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function (a) {
3301        var b = a.target,
3302            c = n.nodeName(b, "input") || n.nodeName(b, "button") ? n.prop(b, "form") : void 0;
3303        c && !n._data(c, "submit") && (n.event.add(c, "submit._submit", function (a) {
3304          a._submitBubble = !0;
3305        }), n._data(c, "submit", !0));
3306      });
3307    },
3308    postDispatch: function postDispatch(a) {
3309      a._submitBubble && (delete a._submitBubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a));
3310    },
3311    teardown: function teardown() {
3312      return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit");
3313    }
3314  }), l.change || (n.event.special.change = {
3315    setup: function setup() {
3316      return ka.test(this.nodeName) ? ("checkbox" !== this.type && "radio" !== this.type || (n.event.add(this, "propertychange._change", function (a) {
3317        "checked" === a.originalEvent.propertyName && (this._justChanged = !0);
3318      }), n.event.add(this, "click._change", function (a) {
3319        this._justChanged && !a.isTrigger && (this._justChanged = !1), n.event.simulate("change", this, a);
3320      })), !1) : void n.event.add(this, "beforeactivate._change", function (a) {
3321        var b = a.target;
3322        ka.test(b.nodeName) && !n._data(b, "change") && (n.event.add(b, "change._change", function (a) {
3323          !this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a);
3324        }), n._data(b, "change", !0));
3325      });
3326    },
3327    handle: function handle(a) {
3328      var b = a.target;
3329      return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0;
3330    },
3331    teardown: function teardown() {
3332      return n.event.remove(this, "._change"), !ka.test(this.nodeName);
3333    }
3334  }), l.focusin || n.each({
3335    focus: "focusin",
3336    blur: "focusout"
3337  }, function (a, b) {
3338    var c = function c(a) {
3339      n.event.simulate(b, a.target, n.event.fix(a));
3340    };
3341
3342    n.event.special[b] = {
3343      setup: function setup() {
3344        var d = this.ownerDocument || this,
3345            e = n._data(d, b);
3346
3347        e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1);
3348      },
3349      teardown: function teardown() {
3350        var d = this.ownerDocument || this,
3351            e = n._data(d, b) - 1;
3352        e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b));
3353      }
3354    };
3355  }), n.fn.extend({
3356    on: function on(a, b, c, d) {
3357      return sa(this, a, b, c, d);
3358    },
3359    one: function one(a, b, c, d) {
3360      return sa(this, a, b, c, d, 1);
3361    },
3362    off: function off(a, b, c) {
3363      var d, e;
3364      if (a && a.preventDefault && a.handleObj) return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
3365
3366      if ("object" == _typeof(a)) {
3367        for (e in a) {
3368          this.off(e, b, a[e]);
3369        }
3370
3371        return this;
3372      }
3373
3374      return b !== !1 && "function" != typeof b || (c = b, b = void 0), c === !1 && (c = qa), this.each(function () {
3375        n.event.remove(this, a, c, b);
3376      });
3377    },
3378    trigger: function trigger(a, b) {
3379      return this.each(function () {
3380        n.event.trigger(a, b, this);
3381      });
3382    },
3383    triggerHandler: function triggerHandler(a, b) {
3384      var c = this[0];
3385      return c ? n.event.trigger(a, b, c, !0) : void 0;
3386    }
3387  });
3388  var ta = / jQuery\d+="(?:null|\d+)"/g,
3389      ua = new RegExp("<(?:" + ba + ")[\\s/>]", "i"),
3390      va = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
3391      wa = /<script|<style|<link/i,
3392      xa = /checked\s*(?:[^=]|=\s*.checked.)/i,
3393      ya = /^true\/(.*)/,
3394      za = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
3395      Aa = ca(d),
3396      Ba = Aa.appendChild(d.createElement("div"));
3397
3398  function Ca(a, b) {
3399    return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a;
3400  }
3401
3402  function Da(a) {
3403    return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a;
3404  }
3405
3406  function Ea(a) {
3407    var b = ya.exec(a.type);
3408    return b ? a.type = b[1] : a.removeAttribute("type"), a;
3409  }
3410
3411  function Fa(a, b) {
3412    if (1 === b.nodeType && n.hasData(a)) {
3413      var c,
3414          d,
3415          e,
3416          f = n._data(a),
3417          g = n._data(b, f),
3418          h = f.events;
3419
3420      if (h) {
3421        delete g.handle, g.events = {};
3422
3423        for (c in h) {
3424          for (d = 0, e = h[c].length; e > d; d++) {
3425            n.event.add(b, c, h[c][d]);
3426          }
3427        }
3428      }
3429
3430      g.data && (g.data = n.extend({}, g.data));
3431    }
3432  }
3433
3434  function Ga(a, b) {
3435    var c, d, e;
3436
3437    if (1 === b.nodeType) {
3438      if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) {
3439        e = n._data(b);
3440
3441        for (d in e.events) {
3442          n.removeEvent(b, d, e.handle);
3443        }
3444
3445        b.removeAttribute(n.expando);
3446      }
3447
3448      "script" === c && b.text !== a.text ? (Da(b).text = a.text, Ea(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && Z.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : "input" !== c && "textarea" !== c || (b.defaultValue = a.defaultValue);
3449    }
3450  }
3451
3452  function Ha(a, b, c, d) {
3453    b = f.apply([], b);
3454    var e,
3455        g,
3456        h,
3457        i,
3458        j,
3459        k,
3460        m = 0,
3461        o = a.length,
3462        p = o - 1,
3463        q = b[0],
3464        r = n.isFunction(q);
3465    if (r || o > 1 && "string" == typeof q && !l.checkClone && xa.test(q)) return a.each(function (e) {
3466      var f = a.eq(e);
3467      r && (b[0] = q.call(this, e, f.html())), Ha(f, b, c, d);
3468    });
3469
3470    if (o && (k = ja(b, a[0].ownerDocument, !1, a, d), e = k.firstChild, 1 === k.childNodes.length && (k = e), e || d)) {
3471      for (i = n.map(ea(k, "script"), Da), h = i.length; o > m; m++) {
3472        g = k, m !== p && (g = n.clone(g, !0, !0), h && n.merge(i, ea(g, "script"))), c.call(a[m], g, m);
3473      }
3474
3475      if (h) for (j = i[i.length - 1].ownerDocument, n.map(i, Ea), m = 0; h > m; m++) {
3476        g = i[m], _.test(g.type || "") && !n._data(g, "globalEval") && n.contains(j, g) && (g.src ? n._evalUrl && n._evalUrl(g.src) : n.globalEval((g.text || g.textContent || g.innerHTML || "").replace(za, "")));
3477      }
3478      k = e = null;
3479    }
3480
3481    return a;
3482  }
3483
3484  function Ia(a, b, c) {
3485    for (var d, e = b ? n.filter(b, a) : a, f = 0; null != (d = e[f]); f++) {
3486      c || 1 !== d.nodeType || n.cleanData(ea(d)), d.parentNode && (c && n.contains(d.ownerDocument, d) && fa(ea(d, "script")), d.parentNode.removeChild(d));
3487    }
3488
3489    return a;
3490  }
3491
3492  n.extend({
3493    htmlPrefilter: function htmlPrefilter(a) {
3494      return a.replace(va, "<$1></$2>");
3495    },
3496    clone: function clone(a, b, c) {
3497      var d,
3498          e,
3499          f,
3500          g,
3501          h,
3502          i = n.contains(a.ownerDocument, a);
3503      if (l.html5Clone || n.isXMLDoc(a) || !ua.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (Ba.innerHTML = a.outerHTML, Ba.removeChild(f = Ba.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a))) for (d = ea(f), h 
3503= ea(a), g = 0; null != (e = h[g]); ++g) {
3504        d[g] && Ga(e, d[g]);
3505      }
3506      if (b) if (c) for (h = h || ea(a), d = d || ea(f), g = 0; null != (e = h[g]); g++) {
3507        Fa(e, d[g]);
3508      } else Fa(a, f);
3509      return d = ea(f, "script"), d.length > 0 && fa(d, !i && ea(a, "script")), d = h = e = null, f;
3510    },
3511    cleanData: function cleanData(a, b) {
3512      for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.attributes, m = n.event.special; null != (d = a[h]); h++) {
3513        if ((b || M(d)) && (f = d[i], g = f && j[f])) {
3514          if (g.events) for (e in g.events) {
3515            m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle);
3516          }
3517          j[f] && (delete j[f], k || "undefined" == typeof d.removeAttribute ? d[i] = void 0 : d.removeAttribute(i), c.push(f));
3518        }
3519      }
3520    }
3521  }), n.fn.extend({
3522    domManip: Ha,
3523    detach: function detach(a) {
3524      return Ia(this, a, !0);
3525    },
3526    remove: function remove(a) {
3527      return Ia(this, a);
3528    },
3529    text: function text(a) {
3530      return Y(this, function (a) {
3531        return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || d).createTextNode(a));
3532      }, null, a, arguments.length);
3533    },
3534    append: function append() {
3535      return Ha(this, arguments, function (a) {
3536        if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
3537          var b = Ca(this, a);
3538          b.appendChild(a);
3539        }
3540      });
3541    },
3542    prepend: function prepend() {
3543      return Ha(this, arguments, function (a) {
3544        if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
3545          var b = Ca(this, a);
3546          b.insertBefore(a, b.firstChild);
3547        }
3548      });
3549    },
3550    before: function before() {
3551      return Ha(this, arguments, function (a) {
3552        this.parentNode && this.parentNode.insertBefore(a, this);
3553      });
3554    },
3555    after: function after() {
3556      return Ha(this, arguments, function (a) {
3557        this.parentNode && this.parentNode.insertBefore(a, this.nextSibling);
3558      });
3559    },
3560    empty: function empty() {
3561      for (var a, b = 0; null != (a = this[b]); b++) {
3562        1 === a.nodeType && n.cleanData(ea(a, !1));
3563
3564        while (a.firstChild) {
3565          a.removeChild(a.firstChild);
3566        }
3567
3568        a.options && n.nodeName(a, "select") && (a.options.length = 0);
3569      }
3570
3571      return this;
3572    },
3573    clone: function clone(a, b) {
3574      return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
3575        return n.clone(this, a, b);
3576      });
3577    },
3578    html: function html(a) {
3579      return Y(this, function (a) {
3580        var b = this[0] || {},
3581            c = 0,
3582            d = this.length;
3583        if (void 0 === a) return 1 === b.nodeType ? b.innerHTML.replace(ta, "") : void 0;
3584
3585        if ("string" == typeof a && !wa.test(a) && (l.htmlSerialize || !ua.test(a)) && (l.leadingWhitespace || !aa.test(a)) && !da[($.exec(a) || ["", ""])[1].toLowerCase()]) {
3586          a = n.htmlPrefilter(a);
3587
3588          try {
3589            for (; d > c; c++) {
3590              b = this[c] || {}, 1 === b.nodeType && (n.cleanData(ea(b, !1)), b.innerHTML = a);
3591            }
3592
3593            b = 0;
3594          } catch (e) {}
3595        }
3596
3597        b && this.empty().append(a);
3598      }, null, a, arguments.length);
3599    },
3600    replaceWith: function replaceWith() {
3601      var a = [];
3602      return Ha(this, arguments, function (b) {
3603        var c = this.parentNode;
3604        n.inArray(this, a) < 0 && (n.cleanData(ea(this)), c && c.replaceChild(b, this));
3605      }, a);
3606    }
3607  }), n.each({
3608    appendTo: "append",
3609    prependTo: "prepend",
3610    insertBefore: "before",
3611    insertAfter: "after",
3612    replaceAll: "replaceWith"
3613  }, function (a, b) {
3614    n.fn[a] = function (a) {
3615      for (var c, d = 0, e = [], f = n(a), h = f.length - 1; h >= d; d++) {
3616        c = d === h ? this : this.clone(!0), n(f[d])[b](c), g.apply(e, c.get());
3617      }
3618
3619      return this.pushStack(e);
3620    };
3621  });
3622  var Ja,
3623      Ka = {
3624    HTML: "block",
3625    BODY: "block"
3626  };
3627
3628  function La(a, b) {
3629    var c = n(b.createElement(a)).appendTo(b.body),
3630        d = n.css(c[0], "display");
3631    return c.detach(), d;
3632  }
3633
3634  function Ma(a) {
3635    var b = d,
3636        c = Ka[a];
3637    return c || (c = La(a, b), "none" !== c && c || (Ja = (Ja || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Ja[0].contentWindow || Ja[0].contentDocument).document, b.write(), b.close(), c = La(a, b), Ja.detach()), Ka[a] = c), c;
3638  }
3639
3640  var Na = /^margin/,
3641      Oa = new RegExp("^(" + T + ")(?!px)[a-z%]+$", "i"),
3642      Pa = function Pa(a, b, c, d) {
3643    var e,
3644        f,
3645        g = {};
3646
3647    for (f in b) {
3648      g[f] = a.style[f], a.style[f] = b[f];
3649    }
3650
3651    e = c.apply(a, d || []);
3652
3653    for (f in b) {
3654      a.style[f] = g[f];
3655    }
3656
3657    return e;
3658  },
3659      Qa = d.documentElement;
3660
3661  !function () {
3662    var b,
3663        c,
3664        e,
3665        f,
3666        g,
3667        h,
3668        i = d.createElement("div"),
3669        j = d.createElement("div");
3670
3671    if (j.style) {
3672      var _k = function _k() {
3673        var k,
3674            l,
3675            m = d.documentElement;
3676        m.appendChild(i), j.style.cssText = "-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%", b = e = h = !1, c = g = !0, a.getComputedStyle && (l = a.getComputedStyle(j), b = "1%" !== (l || {}).top, h = "2px" === (l || {}).marginLeft, e = "4px" === (l || {
3677          width: "4px"
3678        }).width, j.style.marginRight = "50%", c = "4px" === (l || {
3679          marginRight: "4px"
3680        }).marginRight, k = j.appendChild(d.createElement("div")), k.style.cssText = j.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", k.style.marginRight = k.style.width = "0", j.style.width = "1px", g = !parseFloat((a.getComputedStyle(k) || {}).marginRight), j.removeChild(k)), j.style.display = "none", f = 0 === j.getClientRects().length, f && (j.style.display = "", j.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", j.childNodes[0].style.borderCollapse = "separate", k = j.getElementsByTagName("td"), k[0].style.cssText = "margin:0;border:0;padding:0;display:none", f = 0 === k[0].offsetHeight, f && (k[0].style.display = "", k[1].style.display = "none", f = 0 === k[0].offsetHeight)), m.removeChild(i);
3681      };
3682
3683      j.style.cssText = "float:left;opacity:.5", l.opacity = "0.5" === j.style.opacity, l.cssFloat = !!j.style.cssFloat, j.style.backgroundClip = "content-box", j.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === j.style.backgroundClip, i = d.createElement("div"), i.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", j.innerHTML = "", i.appendChild(j), l.boxSizing = "" === j.style.boxSizing || "" === j.style.MozBoxSizing || "" === j.style.WebkitBoxSizing, n.extend(l, {
3684        reliableHiddenOffsets: function reliableHiddenOffsets() {
3685          return null == b && _k(), f;
3686        },
3687        boxSizingReliable: function boxSizingReliable() {
3688          return null == b && _k(), e;
3689        },
3690        pixelMarginRight: function pixelMarginRight() {
3691          return null == b && _k(), c;
3692        },
3693        pixelPosition: function pixelPosition() {
3694          return null == b && _k(), b;
3695        },
3696        reliableMarginRight: function reliableMarginRight() {
3697          return null == b && _k(), g;
3698        },
3699        reliableMarginLeft: function reliableMarginLeft() {
3700          return null == b && _k(), h;
3701        }
3702      });
3703    }
3704  }();
3705  var Ra,
3706      Sa,
3707      Ta = /^(top|right|bottom|left)$/;
3708  a.getComputedStyle ? (Ra = function Ra(b) {
3709    var c = b.ownerDocument.defaultView;
3710    return c && c.opener || (c = a), c.getComputedStyle(b);
3711  }, Sa = function Sa(a, b, c) {
3712    var d,
3713        e,
3714        f,
3715        g,
3716        h = a.style;
3717    return c = c || Ra(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, "" !== g && void 0 !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), c && !l.pixelMarginRight() && Oa.test(g) && Na.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f), void 0 === g ? g : g + "";
3718  }) : Qa.currentStyle && (Ra = function Ra(a) {
3719    return a.currentStyle;
3720  }, Sa = function Sa(a, b, c) {
3721    var d,
3722        e,
3723        f,
3724        g,
3725        h = a.style;
3726    return c = c || Ra(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Oa.test(g) && !Ta.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.
3726currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto";
3727  });
3728
3729  function Ua(a, b) {
3730    return {
3731      get: function get() {
3732        return a() ? void delete this.get : (this.get = b).apply(this, arguments);
3733      }
3734    };
3735  }
3736
3737  var Va = /alpha\([^)]*\)/i,
3738      Wa = /opacity\s*=\s*([^)]*)/i,
3739      Xa = /^(none|table(?!-c[ea]).+)/,
3740      Ya = new RegExp("^(" + T + ")(.*)$", "i"),
3741      Za = {
3742    position: "absolute",
3743    visibility: "hidden",
3744    display: "block"
3745  },
3746      $a = {
3747    letterSpacing: "0",
3748    fontWeight: "400"
3749  },
3750      _a = ["Webkit", "O", "Moz", "ms"],
3751      ab = d.createElement("div").style;
3752
3753  function bb(a) {
3754    if (a in ab) return a;
3755    var b = a.charAt(0).toUpperCase() + a.slice(1),
3756        c = _a.length;
3757
3758    while (c--) {
3759      if (a = _a[c] + b, a in ab) return a;
3760    }
3761  }
3762
3763  function cb(a, b) {
3764    for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++) {
3765      d = a[g], d.style && (f[g] = n._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && W(d) && (f[g] = n._data(d, "olddisplay", Ma(d.nodeName)))) : (e = W(d), (c && "none" !== c || !e) && n._data(d, "olddisplay", e ? c : n.css(d, "display"))));
3766    }
3767
3768    for (g = 0; h > g; g++) {
3769      d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
3770    }
3771
3772    return a;
3773  }
3774
3775  function db(a, b, c) {
3776    var d = Ya.exec(b);
3777    return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b;
3778  }
3779
3780  function eb(a, b, c, d, e) {
3781    for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2) {
3782      "margin" === c && (g += n.css(a, c + V[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + V[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + V[f] + "Width", !0, e))) : (g += n.css(a, "padding" + V[f], !0, e), "padding" !== c && (g += n.css(a, "border" + V[f] + "Width", !0, e)));
3783    }
3784
3785    return g;
3786  }
3787
3788  function fb(a, b, c) {
3789    var d = !0,
3790        e = "width" === b ? a.offsetWidth : a.offsetHeight,
3791        f = Ra(a),
3792        g = l.boxSizing && "border-box" === n.css(a, "boxSizing", !1, f);
3793
3794    if (0 >= e || null == e) {
3795      if (e = Sa(a, b, f), (0 > e || null == e) && (e = a.style[b]), Oa.test(e)) return e;
3796      d = g && (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0;
3797    }
3798
3799    return e + eb(a, b, c || (g ? "border" : "content"), d, f) + "px";
3800  }
3801
3802  n.extend({
3803    cssHooks: {
3804      opacity: {
3805        get: function get(a, b) {
3806          if (b) {
3807            var c = Sa(a, "opacity");
3808            return "" === c ? "1" : c;
3809          }
3810        }
3811      }
3812    },
3813    cssNumber: {
3814      animationIterationCount: !0,
3815      columnCount: !0,
3816      fillOpacity: !0,
3817      flexGrow: !0,
3818      flexShrink: !0,
3819      fontWeight: !0,
3820      lineHeight: !0,
3821      opacity: !0,
3822      order: !0,
3823      orphans: !0,
3824      widows: !0,
3825      zIndex: !0,
3826      zoom: !0
3827    },
3828    cssProps: {
3829      "float": l.cssFloat ? "cssFloat" : "styleFloat"
3830    },
3831    style: function style(a, b, c, d) {
3832      if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
3833        var e,
3834            f,
3835            g,
3836            h = n.camelCase(b),
3837            i = a.style;
3838        if (b = n.cssProps[h] || (n.cssProps[h] = bb(h) || h), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c) return g && "get" in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
3839        if (f = _typeof(c), "string" === f && (e = U.exec(c)) && e[1] && (c = X(a, b, e), f = "number"), null != c && c === c && ("number" === f && (c += e && e[3] || (n.cssNumber[h] ? "" : "px")), l.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set" in g && void 0 === (c = g.set(a, c, d))))) try {
3840          i[b] = c;
3841        } catch (j) {}
3842      }
3843    },
3844    css: function css(a, b, c, d) {
3845      var e,
3846          f,
3847          g,
3848          h = n.camelCase(b);
3849      return b = n.cssProps[h] || (n.cssProps[h] = bb(h) || h), g = n.cssHooks[b] || n.css
3849Hooks[h], g && "get" in g && (f = g.get(a, !0, c)), void 0 === f && (f = Sa(a, b, d)), "normal" === f && b in $a && (f = $a[b]), "" === c || c ? (e = parseFloat(f), c === !0 || isFinite(e) ? e || 0 : f) : f;
3850    }
3851  }), n.each(["height", "width"], function (a, b) {
3852    n.cssHooks[b] = {
3853      get: function get(a, c, d) {
3854        return c ? Xa.test(n.css(a, "display")) && 0 === a.offsetWidth ? Pa(a, Za, function () {
3855          return fb(a, b, d);
3856        }) : fb(a, b, d) : void 0;
3857      },
3858      set: function set(a, c, d) {
3859        var e = d && Ra(a);
3860        return db(a, c, d ? eb(a, b, d, l.boxSizing && "border-box" === n.css(a, "boxSizing", !1, e), e) : 0);
3861      }
3862    };
3863  }), l.opacity || (n.cssHooks.opacity = {
3864    get: function get(a, b) {
3865      return Wa.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : "";
3866    },
3867    set: function set(a, b) {
3868      var c = a.style,
3869          d = a.currentStyle,
3870          e = n.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "",
3871          f = d && d.filter || c.filter || "";
3872      c.zoom = 1, (b >= 1 || "" === b) && "" === n.trim(f.replace(Va, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Va.test(f) ? f.replace(Va, e) : f + " " + e);
3873    }
3874  }), n.cssHooks.marginRight = Ua(l.reliableMarginRight, function (a, b) {
3875    return b ? Pa(a, {
3876      display: "inline-block"
3877    }, Sa, [a, "marginRight"]) : void 0;
3878  }), n.cssHooks.marginLeft = Ua(l.reliableMarginLeft, function (a, b) {
3879    return b ? (parseFloat(Sa(a, "marginLeft")) || (n.contains(a.ownerDocument, a) ? a.getBoundingClientRect().left - Pa(a, {
3880      marginLeft: 0
3881    }, function () {
3882      return a.getBoundingClientRect().left;
3883    }) : 0)) + "px" : void 0;
3884  }), n.each({
3885    margin: "",
3886    padding: "",
3887    border: "Width"
3888  }, function (a, b) {
3889    n.cssHooks[a + b] = {
3890      expand: function expand(c) {
3891        for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++) {
3892          e[a + V[d] + b] = f[d] || f[d - 2] || f[0];
3893        }
3894
3895        return e;
3896      }
3897    }, Na.test(a) || (n.cssHooks[a + b].set = db);
3898  }), n.fn.extend({
3899    css: function css(a, b) {
3900      return Y(this, function (a, b, c) {
3901        var d,
3902            e,
3903            f = {},
3904            g = 0;
3905
3906        if (n.isArray(b)) {
3907          for (d = Ra(a), e = b.length; e > g; g++) {
3908            f[b[g]] = n.css(a, b[g], !1, d);
3909          }
3910
3911          return f;
3912        }
3913
3914        return void 0 !== c ? n.style(a, b, c) : n.css(a, b);
3915      }, a, b, arguments.length > 1);
3916    },
3917    show: function show() {
3918      return cb(this, !0);
3919    },
3920    hide: function hide() {
3921      return cb(this);
3922    },
3923    toggle: function toggle(a) {
3924      return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
3925        W(this) ? n(this).show() : n(this).hide();
3926      });
3927    }
3928  });
3929
3930  function gb(a, b, c, d, e) {
3931    return new gb.prototype.init(a, b, c, d, e);
3932  }
3933
3934  n.Tween = gb, gb.prototype = {
3935    constructor: gb,
3936    init: function init(a, b, c, d, e, f) {
3937      this.elem = a, this.prop = c, this.easing = e || n.easing._default, this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px");
3938    },
3939    cur: function cur() {
3940      var a = gb.propHooks[this.prop];
3941      return a && a.get ? a.get(this) : gb.propHooks._default.get(this);
3942    },
3943    run: function run(a) {
3944      var b,
3945          c = gb.propHooks[this.prop];
3946      return this.options.duration ? this.pos = b = n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : this.pos = b = a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : gb.propHooks._default.set(this), this;
3947    }
3948  }, gb.prototype.init.prototype = gb.prototype, gb.propHooks = {
3949    _default: {
3950      get: function get(a) {
3951        var b;
3952        return 1 !== a.elem.nodeType || null != a.elem[a.prop] && null == a.elem.style[a.prop] ? a.elem[a.prop] : (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0);
3953      },
3954      set: function set(a) {
3955        n.fx.step[a.prop] ? n.fx.step[a.prop](a) : 1 !== a.elem.nodeType || null == a.elem.style[n.cssProps[a.prop]] && !n.cssHooks[a.prop] ? a.elem[a.prop] = a.now : n.style(a.elem, a.prop, a.now + a.unit);
3956      }
3957    }
3958  }, gb.propHooks.scrollTop = gb.propHooks.scrollLeft = {
3959    set: function set(a) {
3960      a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now);
3961    }
3962  }, n.easing = {
3963    linear: function linear(a) {
3964      return a;
3965    },
3966    swing: function swing(a) {
3967      return .5 - Math.cos(a * Math.PI) / 2;
3968    },
3969    _default: "swing"
3970  }, n.fx = gb.prototype.init, n.fx.step = {};
3971  var hb,
3972      ib,
3973      jb = /^(?:toggle|show|hide)$/,
3974      kb = /queueHooks$/;
3975
3976  function lb() {
3977    return a.setTimeout(function () {
3978      hb = void 0;
3979    }), hb = n.now();
3980  }
3981
3982  function mb(a, b) {
3983    var c,
3984        d = {
3985      height: a
3986    },
3987        e = 0;
3988
3989    for (b = b ? 1 : 0; 4 > e; e += 2 - b) {
3990      c = V[e], d["margin" + c] = d["padding" + c] = a;
3991    }
3992
3993    return b && (d.opacity = d.width = a), d;
3994  }
3995
3996  function nb(a, b, c) {
3997    for (var d, e = (qb.tweeners[b] || []).concat(qb.tweeners["*"]), f = 0, g = e.length; g > f; f++) {
3998      if (d = e[f].call(c, b, a)) return d;
3999    }
4000  }
4001
4002  function ob(a, b, c) {
4003    var d,
4004        e,
4005        f,
4006        g,
4007        h,
4008        i,
4009        j,
4010        k,
4011        m = this,
4012        o = {},
4013        p = a.style,
4014        q = a.nodeType && W(a),
4015        r = n._data(a, "fxshow");
4016
4017    c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
4018      h.unqueued || i();
4019    }), h.unqueued++, m.always(function () {
4020      m.always(function () {
4021        h.unqueued--, n.queue(a, "fx").length || h.empty.fire();
4022      });
4023    })), 1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, "display"), k = "none" === j ? n._data(a, "olddisplay") || Ma(a.nodeName) : j, "inline" === k && "none" === n.css(a, "float") && (l.inlineBlockNeedsLayout && "inline" !== Ma(a.nodeName) ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", l.shrinkWrapBlocks() || m.always(function () {
4024      p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2];
4025    }));
4026
4027    for (d in b) {
4028      if (e = b[d], jb.exec(e)) {
4029        if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) {
4030          if ("show" !== e || !r || void 0 === r[d]) continue;
4031          q = !0;
4032        }
4033
4034        o[d] = r && r[d] || n.style(a, d);
4035      } else j = void 0;
4036    }
4037
4038    if (n.isEmptyObject(o)) "inline" === ("none" === j ? Ma(a.nodeName) : j) && (p.display = j);else {
4039      r ? "hidden" in r && (q = r.hidden) : r = n._data(a, "fxshow", {}), f && (r.hidden = !q), q ? n(a).show() : m.done(function () {
4040        n(a).hide();
4041      }), m.done(function () {
4042        var b;
4043
4044        n._removeData(a, "fxshow");
4045
4046        for (b in o) {
4047          n.style(a, b, o[b]);
4048        }
4049      });
4050
4051      for (d in o) {
4052        g = nb(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0));
4053      }
4054    }
4055  }
4056
4057  function pb(a, b) {
4058    var c, d, e, f, g;
4059
4060    for (c in a) {
4061      if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand" in g) {
4062        f = g.expand(f), delete a[d];
4063
4064        for (c in f) {
4065          c in a || (a[c] = f[c], b[c] = e);
4066        }
4067      } else b[d] = e;
4068    }
4069  }
4070
4071  function qb(a, b, c) {
4072    var d,
4073        e,
4074        f = 0,
4075        g = qb.prefilters.length,
4076        h = n.Deferred().always(function () {
4077      delete i.elem;
4078    }),
4079        i = function i() {
4080      if (e) return !1;
4081
4082      for (var b = hb || lb(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++) {
4083        j.tweens[g].run(f);
4084      }
4085
4086      return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1);
4087    },
4088        j = h.promise({
4089      elem: a,
4090      props: n.extend({}, b),
4091      opts: n.extend(!0, {
4092        specialEasing: {},
4093        easing: n.easing._default
4094      }, c),
4095      originalProperties: b,
4096      originalOptions: c,
4097      startTime: hb || lb(),
4098      duration: c.duration,
4099      tweens: [],
4100      createTween: function createTween(b, c) {
4101        var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
4102        return j.tweens.push(d), d;
4103      },
4104      stop: function stop(b) {
4105        var c = 0,
4106            d = b ? j.tweens.length : 0;
4107        if (e) return this;
4108
4109        for (e = !0; d > c; c++) {
4110          j.tweens[c].run(1);
4111        }
4112
4113        return b ? (h.notifyWith(a, [j, 1, 0]), h.resolveWith(a, [j, b])) : h.rejectWith(a, [j, b]), this;
4114      }
4115    }),
4116        k = j.props;
4117
4118    for (pb(k, j.opts.specialEasing); g > f; f++) {
4119      if (d = qb.prefilters[f].call(j, a, k, j.opts)) return n.isFunction(d.stop) && (n._queueHooks(j.elem, j.opts.queue).stop = n.proxy(d.stop, d)), d;
4120    }
4121
4122    return n.map(k, nb, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
4123      elem: a,
4124      anim: j,
4125      queue: j.opts.queue
4126    })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always);
4127  }
4128
4129  n.Animation = n.extend(qb, {
4130    tweeners: {
4131      "*": [function (a, b) {
4132        var c = this.createTween(a, b);
4133        return X(c.elem, a, U.exec(b), c), c;
4134      }]
4135    },
4136    tweener: function tweener(a, b) {
4137      n.isFunction(a) ? (b = a, a = ["*"]) : a = a.match(G);
4138
4139      for (var c, d = 0, e = a.length; e > d; d++) {
4140        c = a[d], qb.tweeners[c] = qb.tweeners[c] || [], qb.tweeners[c].unshift(b);
4141      }
4142    },
4143    prefilters: [ob],
4144    prefilter: function prefilter(a, b) {
4145      b ? qb.prefilters.unshift(a) : qb.prefilters.push(a);
4146    }
4147  }), n.speed = function (a, b, c) {
4148    var d = a && "object" == _typeof(a) ? n.extend({}, a) : {
4149      complete: c || !c && b || n.isFunction(a) && a,
4150      duration: a,
4151      easing: c && b || b && !n.isFunction(b) && b
4152    };
4153    return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, null != d.queue && d.queue !== !0 || (d.queue = "fx"), d.old = d.complete, d.complete = function () {
4154      n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue);
4155    }, d;
4156  }, n.fn.extend({
4157    fadeTo: function fadeTo(a, b, c, d) {
4158      return this.filter(W).css("opacity", 0).show().end().animate({
4159        opacity: b
4160      }, a, c, d);
4161    },
4162    animate: function animate(a, b, c, d) {
4163      var e = n.isEmptyObject(a),
4164          f = n.speed(b, c, d),
4165          g = function g() {
4166        var b = qb(this, n.extend({}, a), f);
4167        (e || n._data(this, "finish")) && b.stop(!0);
4168      };
4169
4170      return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g);
4171    },
4172    stop: function stop(a, b, c) {
4173      var d = function d(a) {
4174        var b = a.stop;
4175        delete a.stop, b(c);
4176      };
4177
4178      return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () {
4179        var b = !0,
4180            e = null != a && a + "queueHooks",
4181            f = n.timers,
4182            g = n._data(this);
4183
4184        if (e) g[e] && g[e].stop && d(g[e]);else for (e in g) {
4185          g[e] && g[e].stop && kb.test(e) && d(g[e]);
4186        }
4187
4188        for (e = f.length; e--;) {
4189          f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
4190        }
4191
4192        !b && c || n.dequeue(this, a);
4193      });
4194    },
4195    finish: function finish(a) {
4196      return a !== !1 && (a = a || "fx"), this.each(function () {
4197        var b,
4198            c = n._data(this),
4199            d = c[a + "queue"],
4200            e = c[a + "queueHooks"],
4201            f = n.timers,
4202            g = d ? d.length : 0;
4203
4204        for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;) {
4205          f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
4206        }
4207
4208        for (b = 0; g > b; b++) {
4209          d[b] && d[b].finish && d[b].finish.call(this);
4210        }
4211
4212        delete c.finish;
4213      });
4214    }
4215  }), n.each(["toggle", "show", "hide"], function (a, b) {
4216    var c = n.fn[b];
4217
4218    n.fn[b] = function (a, d, e) {
4219      return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(mb(b, !0), a, d, e);
4220    };
4221  }), n.each({
4222    slideDown: mb("show"),
4223    slideUp: mb("hide"),
4224    slideToggle: mb("toggle"),
4225    fadeIn: {
4226      opacity: "show"
4227    },
4228    fadeOut: {
4229      opacity: "hide"
4230    },
4231    fadeToggle: {
4232      opacity: "toggle"
4233    }
4234  }, function (a, b) {
4235    n.fn[a] = function (a, c, d) {
4236      return this.animate(b, a, c, d);
4237    };
4238  }), n.timers = [], n.fx.tick = function () {
4239    var a,
4240        b = n.timers,
4241        c = 0;
4242
4243    for (hb = n.now(); c < b.length; c++) {
4244      a = b[c], a() || b[c] !== a || b.splice(c--, 1);
4245    }
4246
4247    b.length || n.fx.stop(), hb = void 0;
4248  }, n.fx.timer = function (a) {
4249    n.timers.push(a), a() ? n.fx.start() : n.timers.pop();
4250  }, n.fx.interval = 13, n.fx.start = function () {
4251    ib || (ib = a.setInterval(n.fx.tick, n.fx.interval));
4252  }, n.fx.stop = function () {
4253    a.clearInterval(ib), ib = null;
4254  }, n.fx.speeds = {
4255    slow: 600,
4256    fast: 200,
4257    _default: 400
4258  }
4258, n.fn.delay = function (b, c) {
4259    return b = n.fx ? n.fx.speeds[b] || b : b, c = c || "fx", this.queue(c, function (c, d) {
4260      var e = a.setTimeout(c, b);
4261
4262      d.stop = function () {
4263        a.clearTimeout(e);
4264      };
4265    });
4266  }, function () {
4267    var a,
4268        b = d.createElement("input"),
4269        c = d.createElement("div"),
4270        e = d.createElement("select"),
4271        f = e.appendChild(d.createElement("option"));
4272    c = d.createElement("div"), c.setAttribute("className", "t"), c.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = c.getElementsByTagName("a")[0], b.setAttribute("type", "checkbox"), c.appendChild(b), a = c.getElementsByTagName("a")[0], a.style.cssText = "top:1px", l.getSetAttribute = "t" !== c.className, l.style = /top/.test(a.getAttribute("style")), l.hrefNormalized = "/a" === a.getAttribute("href"), l.checkOn = !!b.value, l.optSelected = f.selected, l.enctype = !!d.createElement("form").enctype, e.disabled = !0, l.optDisabled = !f.disabled, b = d.createElement("input"), b.setAttribute("value", ""), l.input = "" === b.getAttribute("value"), b.value = "t", b.setAttribute("type", "radio"), l.radioValue = "t" === b.value;
4273  }();
4274  var rb = /\r/g,
4275      sb = /[\x20\t\r\n\f]+/g;
4276  n.fn.extend({
4277    val: function val(a) {
4278      var b,
4279          c,
4280          d,
4281          e = this[0];
4282      {
4283        if (arguments.length) return d = n.isFunction(a), this.each(function (c) {
4284          var e;
4285          1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function (a) {
4286            return null == a ? "" : a + "";
4287          })), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set" in b && void 0 !== b.set(this, e, "value") || (this.value = e));
4288        });
4289        if (e) return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get" in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(rb, "") : null == c ? "" : c);
4290      }
4291    }
4292  }), n.extend({
4293    valHooks: {
4294      option: {
4295        get: function get(a) {
4296          var b = n.find.attr(a, "value");
4297          return null != b ? b : n.trim(n.text(a)).replace(sb, " ");
4298        }
4299      },
4300      select: {
4301        get: function get(a) {
4302          for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++) {
4303            if (c = d[i], (c.selected || i === e) && (l.optDisabled ? !c.disabled : null === c.getAttribute("disabled")) && (!c.parentNode.disabled || !n.nodeName(c.parentNode, "optgroup"))) {
4304              if (b = n(c).val(), f) return b;
4305              g.push(b);
4306            }
4307          }
4308
4309          return g;
4310        },
4311        set: function set(a, b) {
4312          var c,
4313              d,
4314              e = a.options,
4315              f = n.makeArray(b),
4316              g = e.length;
4317
4318          while (g--) {
4319            if (d = e[g], n.inArray(n.valHooks.option.get(d), f) > -1) try {
4320              d.selected = c = !0;
4321            } catch (h) {
4322              d.scrollHeight;
4323            } else d.selected = !1;
4324          }
4325
4326          return c || (a.selectedIndex = -1), e;
4327        }
4328      }
4329    }
4330  }), n.each(["radio", "checkbox"], function () {
4331    n.valHooks[this] = {
4332      set: function set(a, b) {
4333        return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) > -1 : void 0;
4334      }
4335    }, l.checkOn || (n.valHooks[this].get = function (a) {
4336      return null === a.getAttribute("value") ? "on" : a.value;
4337    });
4338  });
4339  var tb,
4340      ub,
4341      vb = n.expr.attrHandle,
4342      wb = /^(?:checked|selected)$/i,
4343      xb = l.getSetAttribute,
4344      yb = l.input;
4345  n.fn.extend({
4346    attr: function attr(a, b) {
4347      return Y(this, n.attr, a, b, arguments.length > 1);
4348    },
4349    removeAttr: function removeAttr(a) {
4350      return this.each(function () {
4351        n.removeAttr(this, a);
4352      });
4353    }
4354  }), n.extend({
4355    attr: function attr(a, b, c) {
4356      var d,
4357          e,
4358          f = a.nodeType;
4359      if (3 !== f && 8 !== f && 2 !== f) return "undefined" == typeof a.getAttribute ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), e = n.attrHooks[b] || (n.expr.match.bool.test(b) ? ub : tb)), void 0 !== c ? null === c ? void n.removeAttr(a, b) : e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : (a.setAttribute(b, c + ""), c) : e && "get" in e && null !== (d = e.get(a, b)) ? d : (d = n.find.attr(a, b), null == d ? void 0 : d));
4360    },
4361    attrHooks: {
4362      type: {
4363        set: function set(a, b) {
4364          if (!l.radioValue && "radio" === b && n.nodeName(a, "input")) {
4365            var c = a.value;
4366            return a.setAttribute("type", b), c && (a.value = c), b;
4367          }
4368        }
4369      }
4370    },
4371    removeAttr: function removeAttr(a, b) {
4372      var c,
4373          d,
4374          e = 0,
4375          f = b && b.match(G);
4376      if (f && 1 === a.nodeType) while (c = f[e++]) {
4377        d = n.propFix[c] || c, n.expr.match.bool.test(c) ? yb && xb || !wb.test(c) ? a[d] = !1 : a[n.camel
4377Case("default-" + c)] = a[d] = !1 : n.attr(a, c, ""), a.removeAttribute(xb ? c : d);
4378      }
4379    }
4380  }), ub = {
4381    set: function set(a, b, c) {
4382      return b === !1 ? n.removeAttr(a, c) : yb && xb || !wb.test(c) ? a.setAttribute(!xb && n.propFix[c] || c, c) : a[n.camelCase("default-" + c)] = a[c] = !0, c;
4383    }
4384  }, n.each(n.expr.match.bool.source.match(/\w+/g), function (a, b) {
4385    var c = vb[b] || n.find.attr;
4386    yb && xb || !wb.test(b) ? vb[b] = function (a, b, d) {
4387      var e, f;
4388      return d || (f = vb[b], vb[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, vb[b] = f), e;
4389    } : vb[b] = function (a, b, c) {
4390      return c ? void 0 : a[n.camelCase("default-" + b)] ? b.toLowerCase() : null;
4391    };
4392  }), yb && xb || (n.attrHooks.value = {
4393    set: function set(a, b, c) {
4394      return n.nodeName(a, "input") ? void (a.defaultValue = b) : tb && tb.set(a, b, c);
4395    }
4396  }), xb || (tb = {
4397    set: function set(a, b, c) {
4398      var d = a.getAttributeNode(c);
4399      return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0;
4400    }
4401  }, vb.id = vb.name = vb.coords = function (a, b, c) {
4402    var d;
4403    return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null;
4404  }, n.valHooks.button = {
4405    get: function get(a, b) {
4406      var c = a.getAttributeNode(b);
4407      return c && c.specified ? c.value : void 0;
4408    },
4409    set: tb.set
4410  }, n.attrHooks.contenteditable = {
4411    set: function set(a, b, c) {
4412      tb.set(a, "" === b ? !1 : b, c);
4413    }
4414  }, n.each(["width", "height"], function (a, b) {
4415    n.attrHooks[b] = {
4416      set: function set(a, c) {
4417        return "" === c ? (a.setAttribute(b, "auto"), c) : void 0;
4418      }
4419    };
4420  })), l.style || (n.attrHooks.style = {
4421    get: function get(a) {
4422      return a.style.cssText || void 0;
4423    },
4424    set: function set(a, b) {
4425      return a.style.cssText = b + "";
4426    }
4427  });
4428  var zb = /^(?:input|select|textarea|button|object)$/i,
4429      Ab = /^(?:a|area)$/i;
4430  n.fn.extend({
4431    prop: function prop(a, b) {
4432      return Y(this, n.prop, a, b, arguments.length > 1);
4433    },
4434    removeProp: function removeProp(a) {
4435      return a = n.propFix[a] || a, this.each(function () {
4436        try {
4437          this[a] = void 0, delete this[a];
4438        } catch (b) {}
4439      });
4440    }
4441  }), n.extend({
4442    prop: function prop(a, b, c) {
4443      var d,
4444          e,
4445          f = a.nodeType;
4446      if (3 !== f && 8 !== f && 2 !== f) return 1 === f && n.isXMLDoc(a) || (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get" in e && null !== (d = e.get(a, b)) ? d : a[b];
4447    },
4448    propHooks: {
4449      tabIndex: {
4450        get: function get(a) {
4451          var b = n.find.attr(a, "tabindex");
4452          return b ? parseInt(b, 10) : zb.test(a.nodeName) || Ab.test(a.nodeName) && a.href ? 0 : -1;
4453        }
4454      }
4455    },
4456    propFix: {
4457      "for": "htmlFor",
4458      "class": "className"
4459    }
4460  }), l.hrefNormalized || n.each(["href", "src"], function (a, b) {
4461    n.propHooks[b] = {
4462      get: function get(a) {
4463        return a.getAttribute(b, 4);
4464      }
4465    };
4466  }), l.optSelected || (n.propHooks.selected = {
4467    get: function get(a) {
4468      var b = a.parentNode;
4469      return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null;
4470    },
4471    set: function set(a) {
4472      var b = a.parentNode;
4473      b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
4474    }
4475  }), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
4476    n.propFix[this.toLowerCase()] = this;
4477  }), l.enctype || (n.propFix.enctype = "encoding");
4478  var Bb = /[\t\r\n\f]/g;
4479
4480  function Cb(a) {
4481    return n.attr(a, "class") || "";
4482  }
4483
4484  n.fn.extend({
4485    addClass: function addClass(a) {
4486      var b,
4487          c,
4488          d,
4489          e,
4490          f,
4491          g,
4492          h,
4493          i = 0;
4494      if (n.isFunction(a)) return this.each(function (b) {
4495        n(this).addClass(a.call(this, b, Cb(this)));
4496      });
4497
4498      if ("string" == typeof a && a) {
4499        b = a.match(G) || [];
4500
4501        while (c = this[i++]) {
4502          if (e = Cb(c), d = 1 === c.nodeType && (" " + e + " ").replace(Bb, " ")) {
4503            g = 0;
4504
4505            while (f = b[g++]) {
4506              d.indexOf(" " + f + " ") < 0 && (d += f + " ");
4507            }
4508
4509            h = n.trim(d), e !== h && n.attr(c, "class", h);
4510          }
4511        }
4512      }
4513
4514      return this;
4515    },
4516    removeClass: function removeClass(a) {
4517      var b,
4518          c,
4519          d,
4520          e,
4521          f,
4522          g,
4523          h,
4524          i = 0;
4525      if (n.isFunction(a)) return this.each(function (b) {
4526        n(this).removeClass(a.call(this, b, Cb(this)));
4527      });
4528      if (!arguments.length) return this.attr("class", "");
4529
4530      if ("string" == typeof a && a) {
4531        b = a.match(G) || [];
4532
4533        while (c = this[i++]) {
4534          if (e = Cb(c), d = 1 === c.nodeType && (" " + e + " ").replace(Bb, " ")) {
4535            g = 0;
4536
4537            while (f = b[g++]) {
4538              while (d.indexOf(" " + f + " ") > -1) {
4539                d = d.replace(" " + f + " ", " ");
4540              }
4541            }
4542
4543            h = n.trim(d), e !== h && n.attr(c, "class", h);
4544          }
4545        }
4546      }
4547
4548      return this;
4549    },
4550    toggleClass: function toggleClass(a, b) {
4551      var c = _typeof(a);
4552
4553      return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : n.isFunction(a) ? this.each(function (c) {
4554        n(this).toggleClass(a.call(this, c, Cb(this), b), b);
4555      }) : this.each(function () {
4556        var b, d, e, f;
4557
4558        if ("string" === c) {
4559          d = 0, e = n(this), f = a.match(G) || [];
4560
4561          while (b = f[d++]) {
4562            e.hasClass(b) ? e.removeClass(b) : e.addClass(b);
4563          }
4564        } else void 0 !== a && "boolean" !== c || (b = Cb(this), b && n._data(this, "__className__", b), n.attr(this, "class", b || a === !1 ? "" : n._data(this, "__className__") || ""));
4565      });
4566    },
4567    hasClass: function hasClass(a) {
4568      var b,
4569          c,
4570          d = 0;
4571      b = " " + a + " ";
4572
4573      while (c = this[d++]) {
4574        if (1 === c.nodeType && (" " + Cb(c) + " ").replace(Bb, " ").indexOf(b) > -1) return !0;
4575      }
4576
4577      return !1;
4578    }
4579  }), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
4580    n.fn[b] = function (a, c) {
4581      return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b);
4582    };
4583  }), n.fn.extend({
4584    hover: function hover(a, b) {
4585      return this.mouseenter(a).mouseleave(b || a);
4586    }
4587  });
4588  var Db = a.location,
4589      Eb = n.now(),
4590      Fb = /\?/,
4591      Gb = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
4592  n.parseJSON = function (b) {
4593    if (a.JSON && a.JSON.parse) return a.JSON.parse(b + "");
4594    var c,
4595        d = null,
4596        e = n.trim(b + "");
4597    return e && !n.trim(e.replace(Gb, function (a, b, e, f) {
4598      return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, "");
4599    })) ? Function("return " + e)() : n.error("Invalid JSON: " + b);
4600  }, n.parseXML = function (b) {
4601    var c, d;
4602    if (!b || "string" != typeof b) return null;
4603
4604    try {
4605      a.DOMParser ? (d = new a.DOMParser(), c = d.parseFromString(b, "text/xml")) : (c = new a.ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b));
4606    } catch (e) {
4607      c = void 0;
4608    }
4609
4610    return c && c.documentElement && !c.getElementsByTagName("parsererror").length || n.error("Invalid XML: " + b), c;
4611  };
4612  var Hb = /#.*$/,
4613      Ib = /([?&])_=[^&]*/,
4614      Jb = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
4615      Kb = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
4616      Lb = /^(?:GET|HEAD)$/,
4617      Mb = /^\/\//,
4618      Nb = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
4619      Ob = {},
4620      Pb = {},
4621      Qb = "*/".concat("*"),
4622      Rb = Db.href,
4623      Sb = Nb.exec(Rb.toLowerCase()) || [];
4624
4625  function Tb(a) {
4626    return function (b, c) {
4627      "string" != typeof b && (c = b, b = "*");
4628      var d,
4629          e = 0,
4630          f = b.toLowerCase().match(G) || [];
4631      if (n.isFunction(c)) while (d = f[e++]) {
4632        "+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c);
4633      }
4634    };
4635  }
4636
4637  function Ub(a, b, c, d) {
4638    var e = {},
4639        f = a === Pb;
4640
4641    function g(h) {
4642      var i;
4643      return e[h] = !0, n.each(a[h] || [], function (a, h) {
4644        var j = h(b, c, d);
4645        return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1);
4646      }), i;
4647    }
4648
4649    return g(b.dataTypes[0]) || !e["*"] && g("*");
4650  }
4651
4652  function Vb(a, b) {
4653    var c,
4654        d,
4655        e = n.ajaxSettings.flatOptions || {};
4656
4657    for (d in b) {
4658      void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]);
4659    }
4660
4661    return c && n.extend(!0, a, c), a;
4662  }
4663
4664  function Wb(a, b, c) {
4665    var d,
4666        e,
4667        f,
4668        g,
4669        h = a.contents,
4670        i = a.dataTypes;
4671
4672    while ("*" === i[0]) {
4673      i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type"));
4674    }
4675
4676    if (e) for (g in h) {
4677      if (h[g] && h[g].test(e)) {
4678        i.unshift(g);
4679        break;
4680      }
4681    }
4682    if (i[0] in c) f = i[0];else {
4683      for (g in c) {
4684        if (!i[0] || a.converters[g + " " + i[0]]) {
4685          f = g;
4686          break;
4687        }
4688
4689        d || (d = g);
4690      }
4691
4692      f = f || d;
4693    }
4694    return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0;
4695  }
4696
4697  function Xb(a, b, c, d) {
4698    var e,
4699        f,
4700        g,
4701        h,
4702        i,
4703        j = {},
4704        k = a.dataTypes.slice();
4705    if (k[1]) for (g in a.converters) {
4706      j[g.toLowerCase()] = a.converters[g];
4707    }
4708    f = k.shift();
4709
4710    while (f) {
4711      if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift()) if ("*" === f) f = i;else if ("*" !== i && i !== f) {
4712        if (g = j[i + " " + f] || j["* " + f], !g) for (e in j) {
4713          if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
4714            g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
4715            break;
4716          }
4717        }
4718        if (g !== !0) if (g && a["throws"]) b = g(b);else try {
4719          b = g(b);
4720        } catch (l) {
4721          return {
4722            state: "parsererror",
4723            error: g ? l : "No conversion from " + i + " to " + f
4724          };
4725        }
4726      }
4727    }
4728
4729    return {
4730      state: "success",
4731      data: b
4732    };
4733  }
4734
4735  n.extend({
4736    active: 0,
4737    lastModified: {},
4738    etag: {},
4739    ajaxSettings: {
4740      url: Rb,
4741      type: "GET",
4742      isLocal: Kb.test(Sb[1]),
4743      global: !0,
4744      processData: !0,
4745      async: !0,
4746      contentType: "application/x-www-form-urlencoded; charset=UTF-8",
4747      accepts: {
4748        "*": Qb,
4749        text: "text/plain",
4750        html: "text/html",
4751        xml: "application/xml, text/xml",
4752        json: "application/json, text/javascript"
4753      },
4754      contents: {
4755        xml: /\bxml\b/,
4756        html: /\bhtml/,
4757        json: /\bjson\b/
4758      },
4759      responseFields: {
4760        xml: "responseXML",
4761        text: "responseText",
4762        json: "responseJSON"
4763      },
4764      converters: {
4765        "* text": String,
4766        "text html": !0,
4767        "text json": n.parseJSON,
4768        "text xml": n.parseXML
4769      },
4770      flatOptions: {
4771        url: !0,
4772        context: !0
4773      }
4774    },
4775    ajaxSetup: function ajaxSetup(a, b) {
4776      return b ? Vb(Vb(a, n.ajaxSettings), b) : Vb(n.ajaxSettings, a);
4777    },
4778    ajaxPrefilter: Tb(Ob),
4779    ajaxTransport: Tb(Pb),
4780    ajax: function ajax(b, c) {
4781      "object" == _typeof(b) && (c = b, b = void 0), c = c || {};
4782      var d,
4783          e,
4784          f,
4785          g,
4786          h,
4787          i,
4788          j,
4789          k,
4790          l = n.ajaxSetup({}, c),
4791          m = l.context || l,
4792          o = l.context && (m.nodeType || m.jquery) ? n(m) : n.event,
4793          p = n.Deferred(),
4794          q = n.Callbacks("once memory"),
4795          r = l.statusCode || {},
4796          s = {},
4797          t = {},
4798          u = 0,
4799          v = "canceled",
4800          w = {
4801        readyState: 0,
4802        getResponseHeader: function getResponseHeader(a) {
4803          var b;
4804
4805          if (2 === u) {
4806            if (!k) {
4807              k = {};
4808
4809              while (b = Jb.exec(g)) {
4810                k[b[1].toLowerCase()] = b[2];
4811              }
4812            }
4813
4814            b = k[a.toLowerCase()];
4815          }
4816
4817          return null == b ? null : b;
4818        },
4819        getAllResponseHeaders: function getAllResponseHeaders() {
4820          return 2 === u ? g : null;
4821        },
4822        setRequestHeader: function setRequestHeader(a, b) {
4823          var c = a.toLowerCase();
4824          return u || (a = t[c] = t[c] || a, s[a] = b), this;
4825        },
4826        overrideMimeType: function overrideMimeType(a) {
4827          return u || (l.mimeType = a), this;
4828        },
4829        statusCode: function statusCode(a) {
4830          var b;
4831          if (a) if (2 > u) for (b in a) {
4832            r[b] = [r[b], a[b]];
4833          }
4833 else w.always(a[w.status]);
4834          return this;
4835        },
4836        abort: function abort(a) {
4837          var b = a || v;
4838          return j && j.abort(b), y(0, b), this;
4839        }
4840      };
4841      if (p.promise(w).complete = q.add, w.success = w.done, w.error = w.fail, l.url = ((b || l.url || Rb) + "").replace(Hb, "").replace(Mb, Sb[1] + "//"), l.type = c.method || c.type || l.method || l.type, l.dataTypes = n.trim(l.dataType || "*").toLowerCase().match(G) || [""], null == l.crossDomain && (d = Nb.exec(l.url.toLowerCase()), l.crossDomain = !(!d || d[1] === Sb[1] && d[2] === Sb[2] && (d[3] || ("http:" === d[1] ? "80" : "443")) === (Sb[3] || ("http:" === Sb[1] ? "80" : "443")))), l.data && l.processData && "string" != typeof l.data && (l.data = n.param(l.data, l.traditional)), Ub(Ob, l, c, w), 2 === u) return w;
4842      i = n.event && l.global, i && 0 === n.active++ && n.event.trigger("ajaxStart"), l.type = l.type.toUpperCase(), l.hasContent = !Lb.test(l.type), f = l.url, l.hasContent || (l.data && (f = l.url += (Fb.test(f) ? "&" : "?") + l.data, delete l.data), l.cache === !1 && (l.url = Ib.test(f) ? f.replace(Ib, "$1_=" + Eb++) : f + (Fb.test(f) ? "&" : "?") + "_=" + Eb++)), l.ifModified && (n.lastModified[f] && w.setRequestHeader("If-Modified-Since", n.lastModified[f]), n.etag[f] && w.setRequestHeader("If-None-Match", n.etag[f])), (l.data && l.hasContent && l.contentType !== !1 || c.contentType) && w.setRequestHeader("Content-Type", l.contentType), w.setRequestHeader("Accept", l.dataTypes[0] && l.accepts[l.dataTypes[0]] ? l.accepts[l.dataTypes[0]] + ("*" !== l.dataTypes[0] ? ", " + Qb + "; q=0.01" : "") : l.accepts["*"]);
4843
4844      for (e in l.headers) {
4845        w.setRequestHeader(e, l.headers[e]);
4846      }
4847
4848      if (l.beforeSend && (l.beforeSend.call(m, w, l) === !1 || 2 === u)) return w.abort();
4849      v = "abort";
4850
4851      for (e in {
4852        success: 1,
4853        error: 1,
4854        complete: 1
4855      }) {
4856        w[e](l[e]);
4857      }
4858
4859      if (j = Ub(Pb, l, c, w)) {
4860        if (w.readyState = 1, i && o.trigger("ajaxSend", [w, l]), 2 === u) return w;
4861        l.async && l.timeout > 0 && (h = a.setTimeout(function () {
4862          w.abort("timeout");
4863        }, l.timeout));
4864
4865        try {
4866          u = 1, j.send(s, y);
4867        } catch (x) {
4868          if (!(2 > u)) throw x;
4869          y(-1, x);
4870        }
4871      } else y(-1, "No Transport");
4872
4873      function y(b, c, d, e) {
4874        var k,
4875            s,
4876            t,
4877            v,
4878            x,
4879            y = c;
4880        2 !== u && (u = 2, h && a.clearTimeout(h), j = void 0, g = e || "", w.readyState = b > 0 ? 4 : 0, k = b >= 200 && 300 > b || 304 === b, d && (v = Wb(l, w, d)), v = Xb(l, v, w, k), k ? (l.ifModified && (x = w.getResponseHeader("Last-Modified"), x && (n.lastModified[f] = x), x = w.getResponseHeader("etag"), x && (n.etag[f] = x)), 204 === b || "HEAD" === l.type ? y = "nocontent" : 304 === b ? y = "notmodified" : (y = v.state, s = v.data, t = v.error, k = !t)) : (t = y, !b && y || (y = "error", 0 > b && (b = 0))), w.status = b, w.statusText = (c || y) + "", k ? p.resolveWith(m, [s, y, w]) : p.rejectWith(m, [w, y, t]), w.statusCode(r), r = void 0, i && o.trigger(k ? "ajaxSuccess" : "ajaxError", [w, l, k ? s : t]), q.fireWith(m, [w, y]), i && (o.trigger("ajaxComplete", [w, l]), --n.active || n.event.trigger("ajaxStop")));
4881      }
4882
4883      return w;
4884    },
4885    getJSON: function getJSON(a, b, c) {
4886      return n.get(a, b, c, "json");
4887    },
4888    getScript: function getScript(a, b) {
4889      return n.get(a, void 0, b, "script");
4890    }
4891  }), n.each(["get", "post"], function (a, b) {
4892    n[b] = function (a, c, d, e) {
4893      return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax(n.extend({
4894        url: a,
4895        type: b,
4896        dataType: e,
4897        data: c,
4898        success: d
4899      }, n.isPlainObject(a) && a));
4900    };
4901  }), n._evalUrl = function (a) {
4902    return n.ajax({
4903      url: a,
4904      type: "GET",
4905      dataType: "script",
4906      cache: !0,
4907      async: !1,
4908      global: !1,
4909      "throws": !0
4910    });
4911  }, n.fn.extend({
4912    wrapAll: function wrapAll(a) {
4913      if (n.isFunction(a)) return this.each(function (b) {
4914        n(this).wrapAll(a.call(this, b));
4915      });
4916
4917      if (this[0]) {
4918        var b = n(a, this[0].ownerDocument).eq(0).clone(!0);
4919        this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
4920          var a = this;
4921
4922          while (a.firstChild && 1 === a.firstChild.nodeType) {
4923            a = a.firstChild;
4924          }
4925
4926          return a;
4927        }).append(this);
4928      }
4929
4930      return this;
4931    },
4932    wrapInner: function wrapInner(a) {
4933      return n.isFunction(a) ? this.each(function (b) {
4934        n(this).wrapInner(a.call(this, b));
4935      }) : this.each(function () {
4936        var b = n(this),
4937            c = b.contents();
4938        c.length ? c.wrapAll(a) : b.append(a);
4939      });
4940    },
4941    wrap: function wrap(a) {
4942      var b = n.isFunction(a);
4943      return this.each(function (c) {
4944        n(this).wrapAll(b ? a.call(this, c) : a);
4945      });
4946    },
4947    unwrap: function unwrap() {
4948      return this.parent().each(function () {
4949        n.nodeName(this, "body") || n(this).replaceWith(this.childNodes);
4950      }).end();
4951    }
4952  });
4953
4954  function Yb(a) {
4955    return a.style && a.style.display || n.css(a, "display");
4956  }
4957
4958  function Zb(a) {
4959    if (!n.contains(a.ownerDocument || d, a)) return !0;
4960
4961    while (a && 1 === a.nodeType) {
4962      if ("none" === Yb(a) || "hidden" === a.type) return !0;
4963      a = a.parentNode;
4964    }
4965
4966    return !1;
4967  }
4968
4969  n.expr.filters.hidden = function (a) {
4970    return l.reliableHiddenOffsets() ? a.offsetWidth <= 0 && a.offsetHeight <= 0 && !a.getClientRects().length : Zb(a);
4971  }, n.expr.filters.visible = function (a) {
4972    return !n.expr.filters.hidden(a);
4973  };
4974  var $b = /%20/g,
4975      _b = /\[\]$/,
4976      ac = /\r?\n/g,
4977      bc = /^(?:submit|button|image|reset|file)$/i,
4978      cc = /^(?:input|select|textarea|keygen)/i;
4979
4980  function dc(a, b, c, d) {
4981    var e;
4982    if (n.isArray(b)) n.each(b, function (b, e) {
4983      c || _b.test(a) ? d(a, e) : dc(a + "[" + ("object" == _typeof(e) && null != e ? b : "") + "]", e, c, d);
4984    });else if (c || "object" !== n.type(b)) d(a, b);else for (e in b) {
4985      dc(a + "[" + e + "]", b[e], c, d);
4986    }
4987  }
4988
4989  n.param = function (a, b) {
4990    var c,
4991        d = [],
4992        e = function e(a, b) {
4993      b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b);
4994    };
4995
4996    if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a)) n.each(a, function () {
4997      e(this.name, this.value);
4998    });else for (c in a) {
4999      dc(c, a[c], b, e);
5000    }
5001    return d.join("&").replace($b, "+");
5002  }, n.fn.extend({
5003    serialize: function serialize() {
5004      return n.param(this.serializeArray());
5005    },
5006    serializeArray: function serializeArray() {
5007      return this.map(function () {
5008        var a = n.prop(this, "elements");
5009        return a ? n.makeArray(a) : this;
5010      }).filter(function () {
5011        var a = this.type;
5012        return this.name && !n(this).is(":disabled") && cc.test(this.nodeName) && !bc.test(a) && (this.checked || !Z.test(a));
5013      }).map(function (a, b) {
5014        var c = n(this).val();
5015        return null == c ? null : n.isArray(c) ? n.map(c, function (a) {
5016          return {
5017            name: b.name,
5018            value: a.replace(ac, "\r\n")
5019          };
5020        }) : {
5021          name: b.name,
5022          value: c.replace(ac, "\r\n")
5023        };
5024      }).get();
5025    }
5026  }), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function () {
5027    return this.isLocal ? ic() : d.documentMode >
5027 8 ? hc() : /^(get|post|head|put|delete|options)$/i.test(this.type) && hc() || ic();
5028  } : hc;
5029  var ec = 0,
5030      fc = {},
5031      gc = n.ajaxSettings.xhr();
5032  a.attachEvent && a.attachEvent("onunload", function () {
5033    for (var a in fc) {
5034      fc[a](void 0, !0);
5035    }
5036  }), l.cors = !!gc && "withCredentials" in gc, gc = l.ajax = !!gc, gc && n.ajaxTransport(function (b) {
5037    if (!b.crossDomain || l.cors) {
5038      var _c;
5039
5040      return {
5041        send: function send(d, e) {
5042          var f,
5043              g = b.xhr(),
5044              h = ++ec;
5045          if (g.open(b.type, b.url, b.async, b.username, b.password), b.xhrFields) for (f in b.xhrFields) {
5046            g[f] = b.xhrFields[f];
5047          }
5048          b.mimeType && g.overrideMimeType && g.overrideMimeType(b.mimeType), b.crossDomain || d["X-Requested-With"] || (d["X-Requested-With"] = "XMLHttpRequest");
5049
5050          for (f in d) {
5051            void 0 !== d[f] && g.setRequestHeader(f, d[f] + "");
5052          }
5053
5054          g.send(b.hasContent && b.data || null), _c = function c(a, d) {
5055            var f, i, j;
5056            if (_c && (d || 4 === g.readyState)) if (delete fc[h], _c = void 0, g.onreadystatechange = n.noop, d) 4 !== g.readyState && g.abort();else {
5057              j = {}, f = g.status, "string" == typeof g.responseText && (j.text = g.responseText);
5058
5059              try {
5060                i = g.statusText;
5061              } catch (k) {
5062                i = "";
5063              }
5064
5065              f || !b.isLocal || b.crossDomain ? 1223 === f && (f = 204) : f = j.text ? 200 : 404;
5066            }
5067            j && e(f, i, j, g.getAllResponseHeaders());
5068          }, b.async ? 4 === g.readyState ? a.setTimeout(_c) : g.onreadystatechange = fc[h] = _c : _c();
5069        },
5070        abort: function abort() {
5071          _c && _c(void 0, !0);
5072        }
5073      };
5074    }
5075  });
5076
5077  function hc() {
5078    try {
5079      return new a.XMLHttpRequest();
5080    } catch (b) {}
5081  }
5082
5083  function ic() {
5084    try {
5085      return new a.ActiveXObject("Microsoft.XMLHTTP");
5086    } catch (b) {}
5087  }
5088
5089  n.ajaxSetup({
5090    accepts: {
5091      script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
5092    },
5093    contents: {
5094      script: /\b(?:java|ecma)script\b/
5095    },
5096    converters: {
5097      "text script": function textScript(a) {
5098        return n.globalEval(a), a;
5099      }
5100    }
5101  }), n.ajaxPrefilter("script", function (a) {
5102    void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1);
5103  }), n.ajaxTransport("script", function (a) {
5104    if (a.crossDomain) {
5105      var b,
5106          c = d.head || n("head")[0] || d.documentElement;
5107      return {
5108        send: function send(e, f) {
5109          b = d.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function (a, c) {
5110            (c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || f(200, "success"));
5111          }, c.insertBefore(b, c.firstChild);
5112        },
5113        abort: function abort() {
5114          b && b.onload(void 0, !0);
5115        }
5116      };
5117    }
5118  });
5119  var jc = [],
5120      kc = /(=)\?(?=&|$)|\?\?/;
5121  n.ajaxSetup({
5122    jsonp: "callback",
5123    jsonpCallback: function jsonpCallback() {
5124      var a = jc.pop() || n.expando + "_" + Eb++;
5125      return this[a] = !0, a;
5126    }
5127  }), n.ajaxPrefilter("json jsonp", function (b, c, d) {
5128    var e,
5129        f,
5130        g,
5131        h = b.jsonp !== !1 && (kc.test(b.url) ? "url" : "string" == typeof b.data && 0 === (b.contentType || "").indexOf("application/x-www-form-urlencoded") && kc.test(b.data) && "data");
5132    return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(kc, "$1" + e) : b.jsonp !== !1 && (b.url += (Fb.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () {
5133      return g || n.error(e + " was not called"), g[0];
5134    }, b.dataTypes[0] = "json", f = a[e], a[e] = function () {
5135      g = arguments;
5136    }, d.always(function () {
5137      void 0 === f ? n(a).removeProp(e) : a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, jc.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0;
5138    }), "script") : void 0;
5139  }), n.parseHTML = function (a, b, c) {
5140    if (!a || "string" != typeof a) return null;
5141    "boolean" == typeof b && (c = b, b = !1), b = b || d;
5142    var e = x.exec(a),
5143        f = !c && [];
5144    return e ? [b.createElement(e[1])] : (e = ja([a], b, f), f && f.length && n(f).remove(), n.merge([], e.childNodes));
5145  };
5146  var lc = n.fn.load;
5147  n.fn.load = function (a, b, c) {
5148    if ("string" != typeof a && lc) return lc.apply(this, arguments);
5149    var d,
5150        e,
5151        f,
5152        g = this,
5153        h = a.indexOf(" ");
5154    return h > -1 && (d = n.trim(a.slice(h, a.length)), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == _typeof(b) && (e = "POST"), g.length > 0 && n.ajax({
5155      url: a,
5156      type: e || "GET",
5157      dataType: "html",
5158      data: b
5159    }).done(function (a) {
5160      f = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a);
5161    }).always(c && function (a, b) {
5162      g.each(function () {
5163        c.apply(this, f || [a.responseText, b, a]);
5164      });
5165    }), this;
5166  }, n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
5167    n.fn[b] = function (a) {
5168      return this.on(b, a);
5169    };
5170  }), n.expr.filters.animated = function (a) {
5171    return n.grep(n.timers, function (b) {
5172      return a === b.elem;
5173    }).length;
5174  };
5175
5176  function mc(a) {
5177    return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1;
5178  }
5179
5180  n.offset = {
5181    setOffset: function setOffset(a, b, c) {
5182      var d,
5183          e,
5184          f,
5185          g,
5186          h,
5187          i,
5188          j,
5189          k = n.css(a, "position"),
5190          l = n(a),
5191          m = {};
5192      "static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && n.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, n.extend({}, h))), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using" in b ? b.using.call(a, m) : l.css(m);
5193    }
5194  }, n.fn.extend({
5195    offset: function offset(a) {
5196      if (arguments.length) return void 0 === a ? this : this.each(function (b) {
5197        n.offset.setOffset(this, a, b);
5198      });
5199      var b,
5200          c,
5201          d = {
5202        top: 0,
5203        left: 0
5204      },
5205          e = this[0],
5206          f = e && e.ownerDocument;
5207      if (f) return b = f.documentElement, n.contains(b, e) ? ("undefined" != typeof e.getBoundingClientRect && (d = e.getBoundingClientRect()), c = mc(f), {
5208        top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
5209        left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
5210      }) : d;
5211    },
5212    position: function position() {
5213      if (this[0]) {
5214        var a,
5215            b,
5216            c = {
5217          top: 0,
5218          left: 0
5219        },
5220            d = this[0];
5221        return "fixed" === n.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (c = a.offset()), c.top += n.css(a[0], "borderTopWidth", !0), c.left += n.css(a[0], "borderLeftWidth", !0)), {
5222          top: b.top - c.top - n.css(d, "marginTop", !0),
5223          left: b.left - c.left - n.css(d, "marginLeft", !0)
5224        };
5225      }
5226    },
5227    offsetParent: function offsetParent() {
5228      return this.map(function () {
5229        var a = this.offsetParent;
5230
5231        while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position")) {
5232          a = a.offsetParent;
5233        }
5234
5235        return a || Qa;
5236      });
5237    }
5238  }), n.each({
5239    scrollLeft: "pageXOffset",
5240    scrollTop: "pageYOffset"
5241  }, function (a, b) {
5242    var c = /Y/.test(b);
5243
5244    n.fn[a] = function (d) {
5245      return Y(this, function (a, d, e) {
5246        var f = mc(a);
5247        return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void (f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e);
5248      }, a, d, arguments.length, null);
5249    };
5250  }), n.each(["top", "left"], function (a, b) {
5251    n.cssHooks[b] = Ua(l.pixelPosition, function (a, c) {
5252      return c ? (c = Sa(a, b), Oa.test(c) ? n(a).position()[b] + "px" : c) : void 0;
5253    });
5254  }), n.each({
5255    Height: "height",
5256    Width: "width"
5257  }, function (a, b) {
5258    n.each({
5259      padding: "inner" + a,
5260      content: b,
5261      "": "outer" + a
5262    }, function (c, d) {
5263      n.fn[d] = function (d, e) {
5264        var f = arguments.length && (c || "boolean" != typeof d),
5265            g = c || (d === !0 || e === !0 ? "margin" : "border");
5266        return Y(this, function (b, c, d) {
5267          var e;
5268          return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g);
5269        }, b, f ? d : void 0, f, null);
5270      };
5271    });
5272  }), n.fn.extend({
5273    bind: function bind(a, b, c) {
5274      return this.on(a, null, b, c);
5275    },
5276    unbind: function unbind(a, b) {
5277      return this.off(a, null, b);
5278    },
5279    delegate: function delegate(a, b, c, d) {
5280      return this.on(b, a, c, d);
5281    },
5282    undelegate: function undelegate(a, b, c) {
5283      return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c);
5284    }
5285  }), n.fn.size = function () {
5286    return this.length;
5287  }, n.fn.andSelf = n.fn.addBack,  true && !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
5288    return n;
5289  }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
5290		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
5291  var nc = a.jQuery,
5292      oc = a.$;
5293  return n.noConflict = function (b) {
5294    return a.$ === n && (a.$ = oc), b && a.jQuery === n && (a.jQuery = nc), n;
5295  }, b || (a.jQuery = a.$ = n), n;
5296});
5297
5298/***/ }),
5299
5300/***/ "./resources/js/jquery.sticky.js":
5301/*!***************************************!*\
5302  !*** ./resources/js/jquery.sticky.js ***!
5303  \***************************************/
5304/***/ ((module, exports, __webpack_require__) => {
5305
5306var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5307
5308// Sticky Plugin v1.0.3 for jQuery
5309// =============
5310// Author: Anthony Garand
5311// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
5312// Improvements by Leonardo C. Daronco (daronco)
5313// Created: 02/14/2011
5314// Date: 07/20/2015
5315// Website: http://stickyjs.com/
5316// Description: Makes an element on the page stick on the screen as you scroll
5317//              It will only set the 'top' and 'position' of your element, you
5318//              might need to adjust the width in some cases.
5319(function (factory) {
5320  if (true) {
5321    // AMD. Register as an anonymous module.
5322    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
5323		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
5324		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
5325		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
5326  } else {}
5327})(function ($) {
5328  var slice = Array.prototype.slice; // save ref to original slice()
5329
5330  var splice = Array.prototype.splice; // save ref to original slice()
5331
5332  var defaults = {
5333    topSpacing: 0,
5334    bottomSpacing: 0,
5335    className: 'is-sticky',
5336    wrapperClassName: 'sticky-wrapper',
5337    center: false,
5338    getWidthFrom: '',
5339    widthFromWrapper: true,
5340    // works only when .getWidthFrom is empty
5341    responsiveWidth: false
5342  },
5343      $window = $(window),
5344      $document = $(document),
5345      sticked = [],
5346      windowHeight = $window.height(),
5347      scroller = function scroller() {
5348    var scrollTop = $window.scrollTop(),
5349        documentHeight = $document.height(),
5350        dwh = documentHeight - windowHeight,
5351        extra = scrollTop > dwh ? dwh - scrollTop : 0;
5352
5353    for (var i = 0, l = sticked.length; i < l; i++) {
5354      var s = sticked[i],
5355          elementTop = s.stickyWrapper.offset().top,
5356          etse = elementTop - s.topSpacing - extra; //update height in case of dynamic content
5357
5358      s.stickyWrapper.css('height', s.stickyElement.outerHeight());
5359
5360      if (scrollTop <= etse) {
5361        if (s.currentTop !== null) {
5362          s.stickyElement.css({
5363            'width': '',
5364            'position': '',
5365            'top': ''
5366          });
5367          s.stickyElement.parent().removeClass(s.className);
5368          s.stickyElement.trigger('sticky-end', [s]);
5369          s.currentTop = null;
5370        }
5371      } else {
5372        var newTop = documentHeight - s.stickyElement.outerHeight() - s.topSpacing - s.bottomSpacing - scrollTop - extra;
5373
5374        if (newTop < 0) {
5375          newTop = newTop + s.topSpacing;
5376        } else {
5377          newTop = s.topSpacing;
5378        }
5379
5380        if (s.currentTop !== newTop) {
5381          var newWidth;
5382
5383          if (s.getWidthFrom) {
5384            newWidth = $(s.getWidthFrom).width() || null;
5385          } else if (s.widthFromWrapper) {
5386            newWidth = s.stickyWrapper.width();
5387          }
5388
5389          if (newWidth == null) {
5390            newWidth = s.stickyElement.width();
5391          }
5392
5393          s.stickyElement.css('width', newWidth).css('position', 'fixed').css('top', newTop);
5394          s.stickyElement.parent().addClass(s.className);
5395
5396          if (s.currentTop === null) {
5397            s.stickyElement.trigger('sticky-start', [s]);
5398          } else {
5399            // sticky is started but it have to be repositioned
5400            s.stickyElement.trigger('sticky-update', [s]);
5401          }
5402
5403          if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
5404            // just reached bottom || just started to stick but bottom is already reached
5405            s.stickyElement.trigger('sticky-bottom-reached', [s]);
5406          } else if (s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
5407            // sticky is started && sticked at topSpacing && overflowing from top just finished
5408            s.stickyElement.trigger('sticky-bottom-unreached', [s]);
5409          }
5410
5411          s.currentTop = newTop;
5412        } // Check if sticky has reached end of container and stop sticking
5413
5414
5415        var stickyWrapperContainer = s.stickyWrapper.parent();
5416        var unstick = s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight() && s.stickyElement.offset().top <= s.topSpacing;
5417
5418        if (unstick) {
5419          s.stickyElement.css('position', 'absolute').css('top', '').css('bottom', 0);
5420        } else {
5421          s.stickyElement.css('position', 'fixed').css('top', newTop).css('bottom', '');
5422        }
5423      }
5424    }
5425  },
5426      resizer = function resizer() {
5427    windowHeight = $window.height();
5428
5429    for (var i = 0, l = sticked.length; i < l; i++) {
5430      var s = sticked[i];
5431      var newWidth = null;
5432
5433      if (s.getWidthFrom) {
5434        if (s.responsiveWidth) {
5435          newWidth = $(s.getWidthFrom).width();
5436        }
5437      } else if (s.widthFromWrapper) {
5438        newWidth = s.stickyWrapper.width();
5439      }
5440
5441      if (newWidth != null) {
5442        s.stickyElement.css('width', newWidth);
5443      }
5444    }
5445  },
5446      methods = {
5447    init: function init(options) {
5448      var o = $.extend({}, defaults, options);
5449      return this.each(function () {
5450        var stickyElement = $(this);
5451        var stickyId = stickyElement.attr('id');
5452        var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
vendor: 3,593 bytes, lines 5453-5572
5453        var wrapper = $('<div></div>').attr('id', wrapperId).addClass(o.wrapperClassName);
5454        stickyElement.wrapAll(wrapper);
5455        var stickyWrapper = stickyElement.parent();
5456
5457        if (o.center) {
5458          stickyWrapper.css({
5459            width: stickyElement.outerWidth(),
5460            marginLeft: "auto",
5461            marginRight: "auto"
5462          });
5463        }
5464
5465        if (stickyElement.css("float") === "right") {
5466          stickyElement.css({
5467            "float": "none"
5468          }).parent().css({
5469            "float": "right"
5470          });
5471        }
5472
5473        o.stickyElement = stickyElement;
5474        o.stickyWrapper = stickyWrapper;
5475        o.currentTop = null;
5476        sticked.push(o);
5477        methods.setWrapperHeight(this);
5478        methods.setupChangeListeners(this);
5479      });
5480    },
5481    setWrapperHeight: function setWrapperHeight(stickyElement) {
5482      var element = $(stickyElement);
5483      var stickyWrapper = element.parent();
5484
5485      if (stickyWrapper) {
5486        stickyWrapper.css('height', element.outerHeight());
5487      }
5488    },
5489    setupChangeListeners: function setupChangeListeners(stickyElement) {
5490      if (window.MutationObserver) {
5491        var mutationObserver = new window.MutationObserver(function (mutations) {
5492          if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
5493            methods.setWrapperHeight(stickyElement);
5494          }
5495        });
5496        mutationObserver.observe(stickyElement, {
5497          subtree: true,
5498          childList: true
5499        });
5500      } else {
5501        stickyElement.addEventListener('DOMNodeInserted', function () {
5502          methods.setWrapperHeight(stickyElement);
5503        }, false);
5504        stickyElement.addEventListener('DOMNodeRemoved', function () {
5505          methods.setWrapperHeight(stickyElement);
5506        }, false);
5507      }
5508    },
5509    update: scroller,
5510    unstick: function unstick(options) {
5511      return this.each(function () {
5512        var that = this;
5513        var unstickyElement = $(that);
5514        var removeIdx = -1;
5515        var i = sticked.length;
5516
5517        while (i-- > 0) {
5518          if (sticked[i].stickyElement.get(0) === that) {
5519            splice.call(sticked, i, 1);
5520            removeIdx = i;
5521          }
5522        }
5523
5524        if (removeIdx !== -1) {
5525          unstickyElement.unwrap();
5526          unstickyElement.css({
5527            'width': '',
5528            'position': '',
5529            'top': '',
5530            'float': ''
5531          });
5532        }
5533      });
5534    }
5535  }; // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
5536
5537
5538  if (window.addEventListener) {
5539    window.addEventListener('scroll', scroller, false);
5540    window.addEventListener('resize', resizer, false);
5541  } else if (window.attachEvent) {
5542    window.attachEvent('onscroll', scroller);
5543    window.attachEvent('onresize', resizer);
5544  }
5545
5546  $.fn.sticky = function (method) {
5547    if (methods[method]) {
5548      return methods[method].apply(this, slice.call(arguments, 1));
5549    } else if (_typeof(method) === 'object' || !method) {
5550      return methods.init.apply(this, arguments);
5551    } else {
5552      $.error('Method ' + method + ' does not exist on jQuery.sticky');
5553    }
5554  };
5555
5556  $.fn.unstick = function (method) {
5557    if (methods[method]) {
5558      return methods[method].apply(this, slice.call(arguments, 1));
5559    } else if (_typeof(method) === 'object' || !method) {
5560      return methods.unstick.apply(this, arguments);
5561    } else {
5562      $.error('Method ' + method + ' does not exist on jQuery.sticky');
5563    }
5564  };
5565
5566  $(function () {
5567    setTimeout(scroller, 0);
5568  });
5569});
5570
5571/***/ }),
5572
5573/***/ "./resources/js/menumaker.js":
5574/*!***********************************!*\
5575  !*** ./resources/js/menumaker.js ***!
5576  \***********************************/
5577/***/ (() => {
5578
5579(function ($) {
5580  $.fn.menumaker = function (options) {
5581    var cssmenu = $(this),
5582        settings = $.extend({
5583      title: "Menu",
5584      format: "dropdown",
5585      breakpoint: 768,
5586      sticky: false
5587    }, options);
5588    return this.each(function () {
5589      cssmenu.find('li ul').parent().addClass('has-sub');
5590
5591      if (settings.format != 'select') {
5592        cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>');
5593        $(this).find("#menu-button").on('click', function () {
5594          $(this).toggleClass('menu-opened');
5595          var mainmenu = $(this).next('ul');
5596
5597          if (mainmenu.hasClass('open')) {
5598            mainmenu.hide().removeClass('open');
5599          } else {
5600            mainmenu.show().addClass('open');
5601
5602            if (settings.format === "dropdown") {
5603              mainmenu.find('ul').show();
5604            }
5605          }
5606        });
5607
5608        multiTg = function multiTg() {
5609          cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
5610          cssmenu.find('.submenu-button').on('click', function () {
5611            $(this).toggleClass('submenu-opened');
5612
5613            if ($(this).siblings('ul').hasClass('open')) {
5614              $(this).siblings('ul').removeClass('open').hide();
5615            } else {
5616              $(this).siblings('ul').addClass('open').show();
5617            }
5618          });
5619        };
5620
5621        if (settings.format === 'multitoggle') multiTg();else cssmenu.addClass('dropdown');
5622      } else if (settings.format === 'select') {
5623        cssmenu.append('<select style="width: 100%"/>').addClass('select-list');
5624        var selectList = cssmenu.find('select');
5625        selectList.append('<option>' + settings.title + '</option>', {
5626          "selected": "selected",
5627          "value": ""
5628        });
5629        cssmenu.find('a').each(function () {
5630          var element = $(this),
5631              indentation = "";
5632
5633          for (i = 1; i < element.parents('ul').length; i++) {
5634            indentation += '-';
5635          }
5636
5637          selectList.append('<option value="' + $(this).attr('href') + '">' + indentation + element.text() + '</option');
5638        });
5639        selectList.on('change', function () {
5640          window.location = $(this).find("option:selected").val();
5641        });
5642      }
5643
5644      if (settings.sticky === true) cssmenu.css('position', 'fixed');
5645
5646      resizeFix = function resizeFix() {
5647        if ($(window).width() > settings.breakpoint) {
5648          cssmenu.find('ul').show();
5649          cssmenu.removeClass('small-screen');
5650
5651          if (settings.format === 'select') {
5652            cssmenu.find('select').hide();
5653          } else {
5654            cssmenu.find("#menu-button").removeClass("menu-opened");
5655          }
5656        }
5657
5658        if ($(window).width() <= settings.breakpoint && !cssmenu.hasClass("small-screen")) {
5659          cssmenu.find('ul').hide().removeClass('open');
5660          cssmenu.addClass('small-screen');
5661
5662          if (settings.format === 'select') {
5663            cssmenu.find('select').show();
5664          }
5665        }
5666      };
5667
5668      resizeFix();
5669      return $(window).on('resize', resizeFix);
5670    });
5671  };
5672})(jQuery);
5673
5674$("#navigation").menumaker({
5675  title: "Menu",
5676  format: "multitoggle"
5677});
5678
5679/***/ }),
5680
5681/***/ "./resources/js/navigation.js":
5682/*!************************************!*\
5683  !*** ./resources/js/navigation.js ***!
5684  \************************************/
5685/***/ (() => {
5686
5687//jQuery to collapse the navbar on scroll
5688$(window).scroll(function () {
5689  if ($("#navigation").offset().top > 160) {
5690    $(".navbar-fixed-top").addClass("header-collapse");
5691  } else {
5692    $(".navbar-fixed-top").removeClass("header-collapse");
5693  }
5694});
5695
5696/***/ }),
5697
5698/***/ "./resources/js/owl.carousel.min.js":
5699/*!******************************************!*\
5700  !*** ./resources/js/owl.carousel.min.js ***!
5701  \******************************************/
5702/***/ (() => {
5703
5704function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5705
5706/**
5707 * Owl Carousel v2.2.1
5708 * Copyright 2013-2017 David Deutsch
5709 * Licensed under  ()
5710 */
5711!function (a, b, c, d) {
5712  function e(b, c) {
5713    this.settings = null, this.options = a.extend({}, e.Defaults, c), this.$element = a(b), this._handlers = {}, this._plugins = {}, this._supress = {}, this._current = null, this._speed = null, this._coordinates = [], this._breakpoint = null, this._width = null, this._items = [], this._clones = [], this._mergers = [], this._widths = [], this._invalidated = {}, this._pipe = [], this._drag = {
5714      time: null,
5715      target: null,
5716      pointer: null,
5717      stage: {
5718        start: null,
5719        current: null
5720      },
5721      direction: null
5722    }, this._states = {
5723      current: {},
5724      tags: {
5725        initializing: ["busy"],
5726        animating: ["busy"],
5727        dragging: ["interacting"]
5728      }
5729    }, a.each(["onResize", "onThrottledResize"], a.proxy(function (b, c) {
5730      this._handlers[c] = a.proxy(this[c], this);
5731    }, this)), a.each(e.Plugins, a.proxy(function (a, b) {
5732      this._plugins[a.charAt(0).toLowerCase() + a.slice(1)] = new b(this);
5733    }, this)), a.each(e.Workers, a.proxy(function (b, c) {
5734      this._pipe.push({
5735        filter: c.filter,
5736        run: a.proxy(c.run, this)
5737      });
5738    }, this)), this.setup(), this.initialize();
5739  }
5740
5741  e.Defaults = {
5742    items: 3,
5743    loop: !1,
5744    center: !1,
5745    rewind: !1,
5746    mouseDrag: !0,
5747    touchDrag: !0,
5748    pullDrag: !0,
5749    freeDrag: !1,
5750    margin: 0,
5751    stagePadding: 0,
5752    merge: !1,
5753    mergeFit: !0,
5754    autoWidth: !1,
5755    startPosition: 0,
5756    rtl: !1,
5757    smartSpeed: 250,
5758    fluidSpeed: !1,
5759    dragEndSpeed: !1,
5760    responsive: {},
5761    responsiveRefreshRate: 200,
5762    responsiveBaseElement: b,
5763    fallbackEasing: "swing",
5764    info: !1,
5765    nestedItemSelector: !1,
5766    itemElement: "div",
5767    stageElement: "div",
5768    refreshClass: "owl-refresh",
5769    loadedClass: "owl-loaded",
5770    loadingClass: "owl-loading",
5771    rtlClass: "owl-rtl",
5772    responsiveClass: "owl-responsive",
5773    dragClass: "owl-drag",
5774    itemClass: "owl-item",
5775    stageClass: "owl-stage",
5776    stageOuterClass: "owl-stage-outer",
5777    grabClass: "owl-grab"
5778  }, e.Width = {
5779    Default: "default",
5780    Inner: "inner",
5781    Outer: "outer"
5782  }, e.Type = {
5783    Event: "event",
5784    State: "state"
5785  }, e.Plugins = {}, e.Workers = [{
5786    filter: ["width", "settings"],
5787    run: function run() {
5788      this._width = this.$element.width();
5789    }
5790  }, {
5791    filter: ["width", "items", "settings"],
5792    run: function run(a) {
5793      a.current = this._items && this._items[this.relative(this._current)];
5794    }
5795  }, {
5796    filter: ["items", "settings"],
5797    run: function run() {
5798      this.$stage.children(".cloned").remove();
5799    }
5800  }, {
5801    filter: ["width", "items", "settings"],
5802    run: function run(a) {
5803      var b = this.settings.margin || "",
5804          c = !this.settings.autoWidth,
5805          d = this.settings.rtl,
5806          e = {
5807        width: "auto",
5808        "margin-left": d ? b : "",
5809        "margin-right": d ? "" : b
5810      };
5811      !c && this.$stage.children().css(e), a.css = e;
5812    }
5813  }, {
5814    filter: ["width", "items", "settings"],
5815    run: function run(a) {
5816      var b = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
5817          c = null,
5818          d = this._items.length,
5819          e = !this.settings.autoWidth,
5820          f = [];
5821
5822      for (a.items = {
5823        merge: !1,
5824        width: b
5825      }; d--;) {
5826        c = this._mergers[d], c = this.settings.mergeFit && Math.min(c, this.settings.items) || c, a.items.merge = c > 1 || a.items.merge, f[d] = e ? b * c : this._items[d].width();
5827      }
5828
5829      this._widths = f;
5830    }
5831  }, {
5832    filter: ["items", "settings"],
5833    run: function run() {
5834      var b = [],
5835          c = this._items,
5836          d = this.settings,
5837          e = Math.max(2 * d.items, 4),
5838          f = 2 * Math.ceil(c.length / 2),
5839          g = d.loop && c.length ? d.rewind ? e : Math.max(e, f) : 0,
5840          h = "",
5841          i = "";
5842
5843      for (g /= 2; g--;) {
5844        b.push(this.normalize(b.length / 2, !0)), h += c[b[b.length - 1]][0].outerHTML, b.push(this.normalize(c.length - 1 - (b.length - 1) / 2, !0)), i = c[b[b.length - 1]][0].outerHTML + i;
5845      }
5846
5847      this._clones = b, a(h).addClass("cloned").appendTo(this.$stage), a(i).addClass("cloned").prependTo(this.$stage);
5848    }
5849  }, {
5850    filter: ["width", "items", "settings"],
5851    run: function run() {
5852      for (var a = this.settings.rtl ? 1 : -1, b = this._clones.length + this._items.length, c = -1, d = 0, e = 0, f = []; ++c < b;) {
5853        d = f[c - 1] || 0, e = this._widths[this.relative(c)] + this.settings.margin, f.pu
5853sh(d + e * a);
5854      }
5855
5856      this._coordinates = f;
5857    }
5858  }, {
5859    filter: ["width", "items", "settings"],
5860    run: function run() {
5861      var a = this.settings.stagePadding,
5862          b = this._coordinates,
5863          c = {
5864        width: Math.ceil(Math.abs(b[b.length - 1])) + 2 * a,
5865        "padding-left": a || "",
5866        "padding-right": a || ""
5867      };
5868      this.$stage.css(c);
5869    }
5870  }, {
5871    filter: ["width", "items", "settings"],
5872    run: function run(a) {
5873      var b = this._coordinates.length,
5874          c = !this.settings.autoWidth,
5875          d = this.$stage.children();
5876      if (c && a.items.merge) for (; b--;) {
5877        a.css.width = this._widths[this.relative(b)], d.eq(b).css(a.css);
5878      } else c && (a.css.width = a.items.width, d.css(a.css));
5879    }
5880  }, {
5881    filter: ["items"],
5882    run: function run() {
5883      this._coordinates.length < 1 && this.$stage.removeAttr("style");
5884    }
5885  }, {
5886    filter: ["width", "items", "settings"],
5887    run: function run(a) {
5888      a.current = a.current ? this.$stage.children().index(a.current) : 0, a.current = Math.max(this.minimum(), Math.min(this.maximum(), a.current)), this.reset(a.current);
5889    }
5890  }, {
5891    filter: ["position"],
5892    run: function run() {
5893      this.animate(this.coordinates(this._current));
5894    }
5895  }, {
5896    filter: ["width", "position", "items", "settings"],
5897    run: function run() {
5898      var a,
5899          b,
5900          c,
5901          d,
5902          e = this.settings.rtl ? 1 : -1,
5903          f = 2 * this.settings.stagePadding,
5904          g = this.coordinates(this.current()) + f,
5905          h = g + this.width() * e,
5906          i = [];
5907
5908      for (c = 0, d = this._coordinates.length; c < d; c++) {
5909        a = this._coordinates[c - 1] || 0, b = Math.abs(this._coordinates[c]) + f * e, (this.op(a, "<=", g) && this.op(a, ">", h) || this.op(b, "<", g) && this.op(b, ">", h)) && i.push(c);
5910      }
5911
5912      this.$stage.children(".active").removeClass("active"), this.$stage.children(":eq(" + i.join("), :eq(") + ")").addClass("active"), this.settings.center && (this.$stage.children(".center").removeClass("center"), this.$stage.children().eq(this.current()).addClass("center"));
5913    }
5914  }], e.prototype.initialize = function () {
5915    if (this.enter("initializing"), this.trigger("initialize"), this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl), this.settings.autoWidth && !this.is("pre-loading")) {
5916      var b, c, e;
5917      b = this.$element.find("img"), c = this.settings.nestedItemSelector ? "." + this.settings.nestedItemSelector : d, e = this.$element.children(c).width(), b.length && e <= 0 && this.preloadAutoWidthImages(b);
5918    }
5919
5920    this.$element.addClass(this.options.loadingClass), this.$stage = a("<" + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>').wrap('<div class="' + this.settings.stageOuterClass + '"/>'), this.$element.append(this.$stage.parent()), this.replace(this.$element.children().not(this.$stage.parent())), this.$element.is(":visible") ? this.refresh() : this.invalidate("width"), this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass), this.registerEventHandlers(), this.leave("initializing"), this.trigger("initialized");
5921  }, e.prototype.setup = function () {
5922    var b = this.viewport(),
5923        c = this.options.responsive,
5924        d = -1,
5925        e = null;
5926    c ? (a.each(c, function (a) {
5927      a <= b && a > d && (d = Number(a));
5928    }), e = a.extend({}, this.options, c[d]), "function" == typeof e.stagePadding && (e.stagePadding = e.stagePadding()), delete e.responsive, e.responsiveClass && this.$element.attr("class", this.$element.attr("class").replace(new RegExp("(" + this.options.responsiveClass + "-)\\S+\\s", "g"), "$1" + d))) : e = a.extend({}, this.options), this.trigger("change", {
5929      property: {
5930        name: "settings",
5931        value: e
5932      }
5933    }), this._breakpoint = d, this.settings = e, this.invalidate("settings"), this.trigger("changed", {
5934      property: {
5935        name: "settings",
5936        value: this.settings
5937      }
5938    });
5939  }, e.prototype.optionsLogic = function () {
5940    this.settings.autoWidth && (this.settings.stagePadding = !1, this.settings.merge = !1);
5941  }, e.prototype.prepare = function (b) {
5942    var c = this.trigger("prepare", {
5943      content: b
5944    });
5945    return c.data || (c.data = a("<" + this.settings.itemElement + "/>").addClass(this.options.itemClass).append(b)), this.trigger("prepared", {
5946      content: c.data
5947    }), c.data;
5948  }, e.prototype.update = function () {
5949    for (var b = 0, c = this._pipe.length, d = a.proxy(function (a) {
5950      return this[a];
5951    }, this._invalidated), e = {}; b < c;) {
5952      (this._invalidated.all || a.grep(this._pipe[b].filter, d).length > 0) && this._pipe[b].run(e), b++;
5953    }
5954
5955    this._invalidated = {}, !this.is("valid") && this.enter("valid");
5956  }, e.prototype.width = function (a) {
5957    switch (a = a || e.Width.Default) {
5958      case e.Width.Inner:
5959      case e.Width.Outer:
5960        return this._width;
5961
5962      default:
5963        return this._width - 2 * this.settings.stagePadding + this.settings.margin;
5964    }
5965  }, e.prototype.refresh = function () {
5966    this.enter("refreshing"), this.trigger("refresh"), this.setup(), this.optionsLogic(), this.$element.addClass(this.options.refreshClass), this.update(), this.$element.removeClass(this.options.refreshClass), this.leave("refreshing"), this.trigger("refreshed");
5967  }, e.prototype.onThrottledResize = function () {
5968    b.clearTimeout(this.resizeTimer), this.resizeTimer = b.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
5969  }, e.prototype.onResize = function () {
5970    return !!this._items.length && this._width !== this.$element.width() && !!this.$element.is(":visible") && (this.enter("resizing"), this.trigger("resize").isDefaultPrevented() ? (this.leave("resizing"), !1) : (this.invalidate("width"), this.refresh(), this.leave("resizing"), void this.trigger("resized")));
5971  }, e.prototype.registerEventHandlers = function () {
5972    a.support.transition && this.$stage.on(a.support.transition.end + ".owl.core", a.proxy(this.onTransitionEnd, this)), this.settings.responsive !== !1 && this.on(b, "resize", this._handlers.onThrottledResize), this.settings.mouseDrag && (this.$element.addClass(this.options.dragClass), this.$stage.on("mousedown.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("dragstart.owl.core selectstart.owl.core", function () {
5973      return !1;
5974    })), this.settings.touchDrag && (this.$stage.on("touchstart.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("touchcancel.owl.core", a.proxy(this.onDragEnd, this)));
5975  }, e.prototype.onDragStart = function (b) {
5976    var d = null;
5977    3 !== b.which && (a.support.transform ? (d = this.$stage.css("transform").replace(/.*\(|\)| /g, "").split(","), d = {
5978      x: d[16 === d.length ? 12 : 4],
vendor: 14,006 bytes, lines 5979-6207
5979      y: d[16 === d.length ? 13 : 5]
5980    }) : (d = this.$stage.position(), d = {
5981      x: this.settings.rtl ? d.left + this.$stage.width() - this.width() + this.settings.margin : d.left,
5982      y: d.top
5983    }), this.is("animating") && (a.support.transform ? this.animate(d.x) : this.$stage.stop(), this.invalidate("position")), this.$element.toggleClass(this.options.grabClass, "mousedown" === b.type), this.speed(0), this._drag.time = new Date().getTime(), this._drag.target = a(b.target), this._drag.stage.start = d, this._drag.stage.current = d, this._drag.pointer = this.pointer(b), a(c).on("mouseup.owl.core touchend.owl.core", a.proxy(this.onDragEnd, this)), a(c).one("mousemove.owl.core touchmove.owl.core", a.proxy(function (b) {
5984      var d = this.difference(this._drag.pointer, this.pointer(b));
5985      a(c).on("mousemove.owl.core touchmove.owl.core", a.proxy(this.onDragMove, this)), Math.abs(d.x) < Math.abs(d.y) && this.is("valid") || (b.preventDefault(), this.enter("dragging"), this.trigger("drag"));
5986    }, this)));
5987  }, e.prototype.onDragMove = function (a) {
5988    var b = null,
5989        c = null,
5990        d = null,
5991        e = this.difference(this._drag.pointer, this.pointer(a)),
5992        f = this.difference(this._drag.stage.start, e);
5993    this.is("dragging") && (a.preventDefault(), this.settings.loop ? (b = this.coordinates(this.minimum()), c = this.coordinates(this.maximum() + 1) - b, f.x = ((f.x - b) % c + c) % c + b) : (b = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()), c = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()), d = this.settings.pullDrag ? -1 * e.x / 5 : 0, f.x = Math.max(Math.min(f.x, b + d), c + d)), this._drag.stage.current = f, this.animate(f.x));
5994  }, e.prototype.onDragEnd = function (b) {
5995    var d = this.difference(this._drag.pointer, this.pointer(b)),
5996        e = this._drag.stage.current,
5997        f = d.x > 0 ^ this.settings.rtl ? "left" : "right";
5998    a(c).off(".owl.core"), this.$element.removeClass(this.options.grabClass), (0 !== d.x && this.is("dragging") || !this.is("valid")) && (this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed), this.current(this.closest(e.x, 0 !== d.x ? f : this._drag.direction)), this.invalidate("position"), this.update(), this._drag.direction = f, (Math.abs(d.x) > 3 || new Date().getTime() - this._drag.time > 300) && this._drag.target.one("click.owl.core", function () {
5999      return !1;
6000    })), this.is("dragging") && (this.leave("dragging"), this.trigger("dragged"));
6001  }, e.prototype.closest = function (b, c) {
6002    var d = -1,
6003        e = 30,
6004        f = this.width(),
6005        g = this.coordinates();
6006    return this.settings.freeDrag || a.each(g, a.proxy(function (a, h) {
6007      return "left" === c && b > h - e && b < h + e ? d = a : "right" === c && b > h - f - e && b < h - f + e ? d = a + 1 : this.op(b, "<", h) && this.op(b, ">", g[a + 1] || h - f) && (d = "left" === c ? a + 1 : a), d === -1;
6008    }, this)), this.settings.loop || (this.op(b, ">", g[this.minimum()]) ? d = b = this.minimum() : this.op(b, "<", g[this.maximum()]) && (d = b = this.maximum())), d;
6009  }, e.prototype.animate = function (b) {
6010    var c = this.speed() > 0;
6011    this.is("animating") && this.onTransitionEnd(), c && (this.enter("animating"), this.trigger("translate")), a.support.transform3d && a.support.transition ? this.$stage.css({
6012      transform: "translate3d(" + b + "px,0px,0px)",
6013      transition: this.speed() / 1e3 + "s"
6014    }) : c ? this.$stage.animate({
6015      left: b + "px"
6016    }, this.speed(), this.settings.fallbackEasing, a.proxy(this.onTransitionEnd, this)) : this.$stage.css({
6017      left: b + "px"
6018    });
6019  }, e.prototype.is = function (a) {
6020    return this._states.current[a] && this._states.current[a] > 0;
6021  }, e.prototype.current = function (a) {
6022    if (a === d) return this._current;
6023    if (0 === this._items.length) return d;
6024
6025    if (a = this.normalize(a), this._current !== a) {
6026      var b = this.trigger("change", {
6027        property: {
6028          name: "position",
6029          value: a
6030        }
6031      });
6032      b.data !== d && (a = this.normalize(b.data)), this._current = a, this.invalidate("position"), this.trigger("changed", {
6033        property: {
6034          name: "position",
6035          value: this._current
6036        }
6037      });
6038    }
6039
6040    return this._current;
6041  }, e.prototype.invalidate = function (b) {
6042    return "string" === a.type(b) && (this._invalidated[b] = !0, this.is("valid") && this.leave("valid")), a.map(this._invalidated, function (a, b) {
6043      return b;
6044    });
6045  }, e.prototype.reset = function (a) {
6046    a = this.normalize(a), a !== d && (this._speed = 0, this._current = a, this.suppress(["translate", "translated"]), this.animate(this.coordinates(a)), this.release(["translate", "translated"]));
6047  }, e.prototype.normalize = function (a, b) {
6048    var c = this._items.length,
6049        e = b ? 0 : this._clones.length;
6050    return !this.isNumeric(a) || c < 1 ? a = d : (a < 0 || a >= c + e) && (a = ((a - e / 2) % c + c) % c + e / 2), a;
6051  }, e.prototype.relative = function (a) {
6052    return a -= this._clones.length / 2, this.normalize(a, !0);
6053  }, e.prototype.maximum = function (a) {
6054    var b,
6055        c,
6056        d,
6057        e = this.settings,
6058        f = this._coordinates.length;
6059    if (e.loop) f = this._clones.length / 2 + this._items.length - 1;else if (e.autoWidth || e.merge) {
6060      for (b = this._items.length, c = this._items[--b].width(), d = this.$element.width(); b-- && (c += this._items[b].width() + this.settings.margin, !(c > d));) {
6061        ;
6062      }
6063
6064      f = b + 1;
6065    } else f = e.center ? this._items.length - 1 : this._items.length - e.items;
6066    return a && (f -= this._clones.length / 2), Math.max(f, 0);
6067  }, e.prototype.minimum = function (a) {
6068    return a ? 0 : this._clones.length / 2;
6069  }, e.prototype.items = function (a) {
6070    return a === d ? this._items.slice() : (a = this.normalize(a, !0), this._items[a]);
6071  }, e.prototype.mergers = function (a) {
6072    return a === d ? this._mergers.slice() : (a = this.normalize(a, !0), this._mergers[a]);
6073  }, e.prototype.clones = function (b) {
6074    var c = this._clones.length / 2,
6075        e = c + this._items.length,
6076        f = function f(a) {
6077      return a % 2 === 0 ? e + a / 2 : c - (a + 1) / 2;
6078    };
6079
6080    return b === d ? a.map(this._clones, function (a, b) {
6081      return f(b);
6082    }) : a.map(this._clones, function (a, c) {
6083      return a === b ? f(c) : null;
6084    });
6085  }, e.prototype.speed = function (a) {
6086    return a !== d && (this._speed = a), this._speed;
6087  }, e.prototype.coordinates = function (b) {
6088    var c,
6089        e = 1,
6090        f = b - 1;
6091    return b === d ? a.map(this._coordinates, a.proxy(function (a, b) {
6092      return this.coordinates(b);
6093    }, this)) : (this.settings.center ? (this.settings.rtl && (e = -1, f = b + 1), c = this._coordinates[b], c += (this.width() - c + (this._coordinates[f] || 0)) / 2 * e) : c = this._coordinates[f] || 0, c = Math.ceil(c));
6094  }, e.prototype.duration = function (a, b, c) {
6095    return 0 === c ? 0 : Math.min(Math.max(Math.abs(b - a), 1), 6) * Math.abs(c || this.settings.smartSpeed);
6096  }, e.prototype.to = function (a, b) {
6097    var c = this.current(),
6098        d = null,
6099        e = a - this.relative(c),
6100        f = (e > 0) - (e < 0),
6101        g = this._items.length,
6102        h = this.minimum(),
6103        i = this.maximum();
6104    this.settings.loop ? (!this.settings.rewind && Math.abs(e) > g / 2 && (e += f * -1 * g), a = c + e, d = ((a - h) % g + g) % g + h, d !== a && d - e <= i && d - e > 0 && (c = d - e, a = d, this.reset(c))) : this.settings.rewind ? (i += 1, a = (a % i + i) % i) : a = Math.max(h, Math.min(i, a)), this.speed(this.duration(c, a, b)), this.current(a), this.$element.is(":visible") && this.update();
6105  }, e.prototype.next = function (a) {
6106    a = a || !1, this.to(this.relative(this.current()) + 1, a);
6107  }, e.prototype.prev = function (a) {
6108    a = a || !1, this.to(this.relative(this.current()) - 1, a);
6109  }, e.prototype.onTransitionEnd = function (a) {
6110    if (a !== d && (a.stopPropagation(), (a.target || a.srcElement || a.originalTarget) !== this.$stage.get(0))) return !1;
6111    this.leave("animating"), this.trigger("translated");
6112  }, e.prototype.viewport = function () {
6113    var d;
6114    return this.options.responsiveBaseElement !== b ? d = a(this.options.responsiveBaseElement).width() : b.innerWidth ? d = b.innerWidth : c.documentElement && c.documentElement.clientWidth ? d = c.documentElement.clientWidth : console.warn("Can not detect viewport width."), d;
6115  }, e.prototype.replace = function (b) {
6116    this.$stage.empty(), this._items = [], b && (b = b instanceof jQuery ? b : a(b)), this.settings.nestedItemSelector && (b = b.find("." + this.settings.nestedItemSelector)), b.filter(function () {
6117      return 1 === this.nodeType;
6118    }).each(a.proxy(function (a, b) {
6119      b = this.prepare(b), this.$stage.append(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1);
6120    }, this)), this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0), this.invalidate("items");
6121  }, e.prototype.add = function (b, c) {
6122    var e = this.relative(this._current);
6123    c = c === d ? this._items.length : this.normalize(c, !0), b = b instanceof jQuery ? b : a(b), this.trigger("add", {
6124      content: b,
6125      position: c
6126    }), b = this.prepare(b), 0 === this._items.length || c === this._items.length ? (0 === this._items.length && this.$stage.append(b), 0 !== this._items.length && this._items[c - 1].after(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)) : (this._items[c].before(b), this._items.splice(c, 0, b), this._mergers.splice(c, 0, 1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)), this._items[e] && this.reset(this._items[e].index()), this.invalidate("items"), this.trigger("added", {
6127      content: b,
6128      position: c
6129    });
6130  }, e.prototype.remove = function (a) {
6131    a = this.normalize(a, !0), a !== d && (this.trigger("remove", {
6132      content: this._items[a],
6133      position: a
6134    }), this._items[a].remove(), this._items.splice(a, 1), this._mergers.splice(a, 1), this.invalidate("items"), this.trigger("removed", {
6135      content: null,
6136      position: a
6137    }));
6138  }, e.prototype.preloadAutoWidthImages = function (b) {
6139    b.each(a.proxy(function (b, c) {
6140      this.enter("pre-loading"), c = a(c), a(new Image()).one("load", a.proxy(function (a) {
6141        c.attr("src", a.target.src), c.css("opacity", 1), this.leave("pre-loading"), !this.is("pre-loading") && !this.is("initializing") && this.refresh();
6142      }, this)).attr("src", c.attr("src") || c.attr("data-src") || c.attr("data-src-retina"));
6143    }, this));
6144  }, e.prototype.destroy = function () {
6145    this.$element.off(".owl.core"), this.$stage.off(".owl.core"), a(c).off(".owl.core"), this.settings.responsive !== !1 && (b.clearTimeout(this.resizeTimer), this.off(b, "resize", this._handlers.onThrottledResize));
6146
6147    for (var d in this._plugins) {
6148      this._plugins[d].destroy();
6149    }
6150
6151    this.$stage.children(".cloned").remove(), this.$stage.unwrap(), this.$stage.children().contents().unwrap(), this.$stage.children().unwrap(), this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class", this.$element.attr("class").replace(new RegExp(this.options.responsiveClass + "-\\S+\\s", "g"), "")).removeData("owl.carousel");
6152  }, e.prototype.op = function (a, b, c) {
6153    var d = this.settings.rtl;
6154
6155    switch (b) {
6156      case "<":
6157        return d ? a > c : a < c;
6158
6159      case ">":
6160        return d ? a < c : a > c;
6161
6162      case ">=":
6163        return d ? a <= c : a >= c;
6164
6165      case "<=":
6166        return d ? a >= c : a <= c;
6167    }
6168  }, e.prototype.on = function (a, b, c, d) {
6169    a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent("on" + b, c);
6170  }, e.prototype.off = function (a, b, c, d) {
6171    a.removeEventListener ? a.removeEventListener(b, c, d) : a.detachEvent && a.detachEvent("on" + b, c);
6172  }, e.prototype.trigger = function (b, c, d, f, g) {
6173    var h = {
6174      item: {
6175        count: this._items.length,
6176        index: this.current()
6177      }
6178    },
6179        i = a.camelCase(a.grep(["on", b, d], function (a) {
6180      return a;
6181    }).join("-").toLowerCase()),
6182        j = a.Event([b, "owl", d || "carousel"].join(".").toLowerCase(), a.extend({
6183      relatedTarget: this
6184    }, h, c));
6185    return this._supress[b] || (a.each(this._plugins, function (a, b) {
6186      b.onTrigger && b.onTrigger(j);
6187    }), this.register({
6188      type: e.Type.Event,
6189      name: b
6190    }), this.$element.trigger(j), this.settings && "function" == typeof this.settings[i] && this.settings[i].call(this, j)), j;
6191  }, e.prototype.enter = function (b) {
6192    a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) {
6193      this._states.current[b] === d && (this._states.current[b] = 0), this._states.current[b]++;
6194    }, this));
6195  }, e.prototype.leave = function (b) {
6196    a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) {
6197      this._states.current[b]--;
6198    }, this));
6199  }, e.prototype.register = function (b) {
6200    if (b.type === e.Type.Event) {
6201      if (a.event.special[b.name] || (a.event.special[b.name] = {}), !a.event.special[b.name].owl) {
6202        var c = a.event.special[b.name]._default;
6203        a.event.special[b.name]._default = function (a) {
6204          return !c || !c.apply || a.namespace && a.namespace.indexOf("owl") !== -1 ? a.namespace && a.namespace.indexOf("owl") > -1 : c.apply(this, arguments);
6205        }, a.event.special[b.name].owl = !0;
6206      }
6207    } else b.type === e.Type.State && (this._states.tags[b.name] ? this._states.tags[b.name] = this._states.tags[b.name].
6207concat(b.tags) : this._states.tags[b.name] = b.tags, this._states.tags[b.name] = a.grep(this._states.tags[b.name], a.proxy(function (c, d) {
6208      return a.inArray(c, this._states.tags[b.name]) === d;
6209    }, this)));
6210  }, e.prototype.suppress = function (b) {
6211    a.each(b, a.proxy(function (a, b) {
6212      this._supress[b] = !0;
6213    }, this));
6214  }, e.prototype.release = function (b) {
6215    a.each(b, a.proxy(function (a, b) {
6216      delete this._supress[b];
6217    }, this));
6218  }, e.prototype.pointer = function (a) {
6219    var c = {
6220      x: null,
6221      y: null
6222    };
6223    return a = a.originalEvent || a || b.event, a = a.touches && a.touches.length ? a.touches[0] : a.changedTouches && a.changedTouches.length ? a.changedTouches[0] : a, a.pageX ? (c.x = a.pageX, c.y = a.pageY) : (c.x = a.clientX, c.y = a.clientY), c;
6224  }, e.prototype.isNumeric = function (a) {
6225    return !isNaN(parseFloat(a));
6226  }, e.prototype.difference = function (a, b) {
6227    return {
6228      x: a.x - b.x,
6229      y: a.y - b.y
6230    };
6231  }, a.fn.owlCarousel = function (b) {
6232    var c = Array.prototype.slice.call(arguments, 1);
6233    return this.each(function () {
6234      var d = a(this),
6235          f = d.data("owl.carousel");
6236      f || (f = new e(this, "object" == _typeof(b) && b), d.data("owl.carousel", f), a.each(["next", "prev", "to", "destroy", "refresh", "replace", "add", "remove"], function (b, c) {
6237        f.register({
6238          type: e.Type.Event,
6239          name: c
6240        }), f.$element.on(c + ".owl.carousel.core", a.proxy(function (a) {
6241          a.namespace && a.relatedTarget !== this && (this.suppress([c]), f[c].apply(this, [].slice.call(arguments, 1)), this.release([c]));
6242        }, f));
6243      })), "string" == typeof b && "_" !== b.charAt(0) && f[b].apply(f, c);
6244    });
6245  }, a.fn.owlCarousel.Constructor = e;
6246}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6247  var e = function e(b) {
6248    this._core = b, this._interval = null, this._visible = null, this._handlers = {
6249      "initialized.owl.carousel": a.proxy(function (a) {
6250        a.namespace && this._core.settings.autoRefresh && this.watch();
6251      }, this)
6252    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);
6253  };
6254
6255  e.Defaults = {
6256    autoRefresh: !0,
6257    autoRefreshInterval: 500
6258  }, e.prototype.watch = function () {
6259    this._interval || (this._visible = this._core.$element.is(":visible"), this._interval = b.setInterval(a.proxy(this.refresh, this), this._core.settings.autoRefreshInterval));
6260  }, e.prototype.refresh = function () {
6261    this._core.$element.is(":visible") !== this._visible && (this._visible = !this._visible, this._core.$element.toggleClass("owl-hidden", !this._visible), this._visible && this._core.invalidate("width") && this._core.refresh());
6262  }, e.prototype.destroy = function () {
6263    var a, c;
6264    b.clearInterval(this._interval);
6265
6266    for (a in this._handlers) {
6267      this._core.$element.off(a, this._handlers[a]);
6268    }
6269
6270    for (c in Object.getOwnPropertyNames(this)) {
6271      "function" != typeof this[c] && (this[c] = null);
6272    }
6273  }, a.fn.owlCarousel.Constructor.Plugins.AutoRefresh = e;
6274}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6275  var e = function e(b) {
6276    this._core = b, this._loaded = [], this._handlers = {
6277      "initialized.owl.carousel change.owl.carousel resized.owl.carousel": a.proxy(function (b) {
6278        if (b.namespace && this._core.settings && this._core.settings.lazyLoad && (b.property && "position" == b.property.name || "initialized" == b.type)) for (var c = this._core.settings, e = c.center && Math.ceil(c.items / 2) || c.items, f = c.center && e * -1 || 0, g = (b.property && b.property.value !== d ? b.property.value : this._core.current()) + f, h = this._core.clones().length, i = a.proxy(function (a, b) {
6279          this.load(b);
6280        }, this); f++ < e;) {
6281          this.load(h / 2 + this._core.relative(g)), h && a.each(this._core.clones(this._core.relative(g)), i), g++;
6282        }
6283      }, this)
6284    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);
6285  };
6286
6287  e.Defaults = {
6288    lazyLoad: !1
6289  }, e.prototype.load = function (c) {
6290    var d = this._core.$stage.children().eq(c),
6291        e = d && d.find(".owl-lazy");
6292
6293    !e || a.inArray(d.get(0), this._loaded) > -1 || (e.each(a.proxy(function (c, d) {
6294      var e,
6295          f = a(d),
6296          g = b.devicePixelRatio > 1 && f.attr("data-src-retina") || f.attr("data-src");
6297      this._core.trigger("load", {
6298        element: f,
6299        url: g
6300      }, "lazy"), f.is("img") ? f.one("load.owl.lazy", a.proxy(function () {
6301        f.css("opacity", 1), this._core.trigger("loaded", {
6302          element: f,
6303          url: g
6304        }, "lazy");
6305      }, this)).attr("src", g) : (e = new Image(), e.onload = a.proxy(function () {
6306        f.css({
6307          "background-image": 'url("' + g + '")',
6308          opacity: "1"
6309        }), this._core.trigger("loaded", {
6310          element: f,
6311          url: g
6312        }, "lazy");
6313      }, this), e.src = g);
6314    }, this)), this._loaded.push(d.get(0)));
6315  }, e.prototype.destroy = function () {
6316    var a, b;
6317
6318    for (a in this.handlers) {
6319      this._core.$element.off(a, this.handlers[a]);
6320    }
6321
6322    for (b in Object.getOwnPropertyNames(this)) {
6323      "function" != typeof this[b] && (this[b] = null);
6324    }
6325  }, a.fn.owlCarousel.Constructor.Plugins.Lazy = e;
6326}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6327  var e = function e(b) {
6328    this._core = b, this._handlers = {
6329      "initialized.owl.carousel refreshed.owl.carousel": a.proxy(function (a) {
6330        a.namespace && this._core.settings.autoHeight && this.update();
6331      }, this),
6332      "changed.owl.carousel": a.proxy(function (a) {
6333        a.namespace && this._core.settings.autoHeight && "position" == a.property.name && this.update();
6334      }, this),
6335      "loaded.owl.lazy": a.proxy(function (a) {
6336        a.namespace && this._core.settings.autoHeight && a.element.closest("." + this._core.settings.itemClass).index() === this._core.current() && this.update();
6337      }, this)
6338    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers);
6339  };
6340
6341  e.Defaults = {
6342    autoHeight: !1,
6343    autoHeightClass: "owl-height"
6344  }, e.prototype.update = function () {
6345    var b = this._core._current,
6346        c = b + this._core.settings.items,
6347        d = this._core.$stage.children().toArray().slice(b, c),
6348        e = [],
6349        f = 0;
6350
6351    a.each(d, function (b, c) {
6352      e.push(a(c).height());
6353    }), f = Math.max.apply(null, e), this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass);
6354  }, e.prototype.destroy = function () {
6355    var a, b;
6356
6357    for (a in this._handlers) {
6358      this._core.$element.off(a, this._handlers[a]);
6359    }
6360
6361    for (b in Object.getOwnPropertyNames(this)) {
6362      "function" != typeof this[b] && (this[b] = null);
6363    }
6364  }, a.fn.owlCarousel.Constructor.Plugins.AutoHeight = e;
6365}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6366  var e = function e(b) {
6367    this._core = b, this._videos = {}, this._playing = null, this._handlers = {
6368      "initialized.owl.carousel": a.proxy(function (a) {
6369        a.namespace && this._core.register({
6370          type: "state",
6371          name: "playing",
6372          tags: ["interacting"]
6373        });
6374      }, this),
6375      "resize.owl.carousel": a.proxy(function (a) {
6376        a.namespace && this._core.settings.video && this.isInFullScreen() && a.preventDefault();
6377      }, this),
6378      "refreshed.owl.carousel": a.proxy(function (a) {
6379        a.namespace && this._core.is("resizing") && this._core.$stage.find(".cloned .owl-video-frame").remove();
6380      }, this),
6381      "changed.owl.carousel": a.proxy(function (a) {
6382        a.namespace && "position" === a.property.name && this._playing && this.stop();
6383      }, this),
6384      "prepared.owl.carousel": a.proxy(function (b) {
6385        if (b.namespace) {
6386          var c = a(b.content).find(".owl-video");
6387          c.length && (c.css("display", "none"), this.fetch(c, a(b.content)));
6388        }
6389      }, this)
6390    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers), this._core.$element.on("click.owl.video", ".owl-video-play-icon", a.proxy(function (a) {
6391      this.play(a);
6392    }, this));
6393  };
6394
6395  e.Defaults = {
6396    video: !1,
6397    videoHeight: !1,
6398    videoWidth: !1
6399  }, e.prototype.fetch = function (a, b) {
6400    var c = function () {
6401      return a.attr("data-vimeo-id") ? "vimeo" : a.attr("data-vzaar-id") ? "vzaar" : "youtube";
6402    }(),
6403        d = a.attr("data-vimeo-id") || a.attr("data-youtube-id") || a.attr("data-vzaar-id"),
6404        e = a.attr("data-width") || this._core.settings.videoWidth,
6405        f = a.attr("data-height") || this._core.settings.videoHeight,
6406        g = a.attr("href");
6407
6408    if (!g) throw new Error("Missing video URL.");
6409    if (d = g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/), d[3].indexOf("youtu") > -1) c = "youtube";else if (d[3].indexOf("vimeo") > -1) c = "vimeo";else {
6410      if (!(d[3].indexOf("vzaar") > -1)) throw new Error("Video URL not supported.");
6411      c = "vzaar";
6412    }
6413    d = d[6], this._videos[g] = {
6414      type: c,
6415      id: d,
6416      width: e,
6417      height: f
6418    }, b.attr("data-video", g), this.thumbnail(a, this._videos[g]);
6419  }, e.prototype.thumbnail = function (b, c) {
6420    var d,
6421        e,
6422        f,
6423        g = c.width && c.height ? 'style="width:' + c.width + "px;height:" + c.height + 'px;"' : "",
6424        h = b.find("img"),
6425        i = "src",
6426        j = "",
6427        k = this._core.settings,
6428        l = function l(a) {
6429      e = '<div class="owl-video-play-icon"></div>', d = k.lazyLoad ? '<div class="owl-video-tn ' + j + '" ' + i + '="' + a + '"></div>' : '<div class="owl-video-tn" style="opacity:1;background-image:url(' + a + ')"></div>', b.after(d), b.after(e);
6430    };
6431
6432    if (b.wrap('<div class="owl-video-wrapper"' + g + "></div>"), this._core.settings.lazyLoad && (i = "data-src", j = "owl-lazy"), h.length) return l(h.attr(i)), h.remove(), !1;
6433    "youtube" === c.type ? (f = "//img.youtube.com/vi/" + c.id + "/hqdefault.jpg", l(f)) : "vimeo" === c.type ? a.aja
vendor: 14,018 bytes, lines 6433-6707
6433x({
6434      type: "GET",
6435      url: "//vimeo.com/api/v2/video/" + c.id + ".json",
6436      jsonp: "callback",
6437      dataType: "jsonp",
6438      success: function success(a) {
6439        f = a[0].thumbnail_large, l(f);
6440      }
6441    }) : "vzaar" === c.type && a.ajax({
6442      type: "GET",
6443      url: "//vzaar.com/api/videos/" + c.id + ".json",
6444      jsonp: "callback",
6445      dataType: "jsonp",
6446      success: function success(a) {
6447        f = a.framegrab_url, l(f);
6448      }
6449    });
6450  }, e.prototype.stop = function () {
6451    this._core.trigger("stop", null, "video"), this._playing.find(".owl-video-frame").remove(), this._playing.removeClass("owl-video-playing"), this._playing = null, this._core.leave("playing"), this._core.trigger("stopped", null, "video");
6452  }, e.prototype.play = function (b) {
6453    var c,
6454        d = a(b.target),
6455        e = d.closest("." + this._core.settings.itemClass),
6456        f = this._videos[e.attr("data-video")],
6457        g = f.width || "100%",
6458        h = f.height || this._core.$stage.height();
6459
6460    this._playing || (this._core.enter("playing"), this._core.trigger("play", null, "video"), e = this._core.items(this._core.relative(e.index())), this._core.reset(e.index()), "youtube" === f.type ? c = '<iframe width="' + g + '" height="' + h + '" src="//www.youtube.com/embed/' + f.id + "?autoplay=1&rel=0&v=" + f.id + '" frameborder="0" allowfullscreen></iframe>' : "vimeo" === f.type ? c = '<iframe src="//player.vimeo.com/video/' + f.id + '?autoplay=1" width="' + g + '" height="' + h + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>' : "vzaar" === f.type && (c = '<iframe frameborder="0"height="' + h + '"width="' + g + '" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/' + f.id + '/player?autoplay=true"></iframe>'), a('<div class="owl-video-frame">' + c + "</div>").insertAfter(e.find(".owl-video")), this._playing = e.addClass("owl-video-playing"));
6461  }, e.prototype.isInFullScreen = function () {
6462    var b = c.fullscreenElement || c.mozFullScreenElement || c.webkitFullscreenElement;
6463    return b && a(b).parent().hasClass("owl-video-frame");
6464  }, e.prototype.destroy = function () {
6465    var a, b;
6466
6467    this._core.$element.off("click.owl.video");
6468
6469    for (a in this._handlers) {
6470      this._core.$element.off(a, this._handlers[a]);
6471    }
6472
6473    for (b in Object.getOwnPropertyNames(this)) {
6474      "function" != typeof this[b] && (this[b] = null);
6475    }
6476  }, a.fn.owlCarousel.Constructor.Plugins.Video = e;
6477}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6478  var e = function e(b) {
6479    this.core = b, this.core.options = a.extend({}, e.Defaults, this.core.options), this.swapping = !0, this.previous = d, this.next = d, this.handlers = {
6480      "change.owl.carousel": a.proxy(function (a) {
6481        a.namespace && "position" == a.property.name && (this.previous = this.core.current(), this.next = a.property.value);
6482      }, this),
6483      "drag.owl.carousel dragged.owl.carousel translated.owl.carousel": a.proxy(function (a) {
6484        a.namespace && (this.swapping = "translated" == a.type);
6485      }, this),
6486      "translate.owl.carousel": a.proxy(function (a) {
6487        a.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn) && this.swap();
6488      }, this)
6489    }, this.core.$element.on(this.handlers);
6490  };
6491
6492  e.Defaults = {
6493    animateOut: !1,
6494    animateIn: !1
6495  }, e.prototype.swap = function () {
6496    if (1 === this.core.settings.items && a.support.animation && a.support.transition) {
6497      this.core.speed(0);
6498      var b,
6499          c = a.proxy(this.clear, this),
6500          d = this.core.$stage.children().eq(this.previous),
6501          e = this.core.$stage.children().eq(this.next),
6502          f = this.core.settings.animateIn,
6503          g = this.core.settings.animateOut;
6504      this.core.current() !== this.previous && (g && (b = this.core.coordinates(this.previous) - this.core.coordinates(this.next), d.one(a.support.animation.end, c).css({
6505        left: b + "px"
6506      }).addClass("animated owl-animated-out").addClass(g)), f && e.one(a.support.animation.end, c).addClass("animated owl-animated-in").addClass(f));
6507    }
6508  }, e.prototype.clear = function (b) {
6509    a(b.target).css({
6510      left: ""
6511    }).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut), this.core.onTransitionEnd();
6512  }, e.prototype.destroy = function () {
6513    var a, b;
6514
6515    for (a in this.handlers) {
6516      this.core.$element.off(a, this.handlers[a]);
6517    }
6518
6519    for (b in Object.getOwnPropertyNames(this)) {
6520      "function" != typeof this[b] && (this[b] = null);
6521    }
6522  }, a.fn.owlCarousel.Constructor.Plugins.Animate = e;
6523}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6524  var e = function e(b) {
6525    this._core = b, this._timeout = null, this._paused = !1, this._handlers = {
6526      "changed.owl.carousel": a.proxy(function (a) {
6527        a.namespace && "settings" === a.property.name ? this._core.settings.autoplay ? this.play() : this.stop() : a.namespace && "position" === a.property.name && this._core.settings.autoplay && this._setAutoPlayInterval();
6528      }, this),
6529      "initialized.owl.carousel": a.proxy(function (a) {
6530        a.namespace && this._core.settings.autoplay && this.play();
6531      }, this),
6532      "play.owl.autoplay": a.proxy(function (a, b, c) {
6533        a.namespace && this.play(b, c);
6534      }, this),
6535      "stop.owl.autoplay": a.proxy(function (a) {
6536        a.namespace && this.stop();
6537      }, this),
6538      "mouseover.owl.autoplay": a.proxy(function () {
6539        this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause();
6540      }, this),
6541      "mouseleave.owl.autoplay": a.proxy(function () {
6542        this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.play();
6543      }, this),
6544      "touchstart.owl.core": a.proxy(function () {
6545        this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause();
6546      }, this),
6547      "touchend.owl.core": a.proxy(function () {
6548        this._core.settings.autoplayHoverPause && this.play();
6549      }, this)
6550    }, this._core.$element.on(this._handlers), this._core.options = a.extend({}, e.Defaults, this._core.options);
6551  };
6552
6553  e.Defaults = {
6554    autoplay: !1,
6555    autoplayTimeout: 5e3,
6556    autoplayHoverPause: !1,
6557    autoplaySpeed: !1
6558  }, e.prototype.play = function (a, b) {
6559    this._paused = !1, this._core.is("rotating") || (this._core.enter("rotating"), this._setAutoPlayInterval());
6560  }, e.prototype._getNextTimeout = function (d, e) {
6561    return this._timeout && b.clearTimeout(this._timeout), b.setTimeout(a.proxy(function () {
6562      this._paused || this._core.is("busy") || this._core.is("interacting") || c.hidden || this._core.next(e || this._core.settings.autoplaySpeed);
6563    }, this), d || this._core.settings.autoplayTimeout);
6564  }, e.prototype._setAutoPlayInterval = function () {
6565    this._timeout = this._getNextTimeout();
6566  }, e.prototype.stop = function () {
6567    this._core.is("rotating") && (b.clearTimeout(this._timeout), this._core.leave("rotating"));
6568  }, e.prototype.pause = function () {
6569    this._core.is("rotating") && (this._paused = !0);
6570  }, e.prototype.destroy = function () {
6571    var a, b;
6572    this.stop();
6573
6574    for (a in this._handlers) {
6575      this._core.$element.off(a, this._handlers[a]);
6576    }
6577
6578    for (b in Object.getOwnPropertyNames(this)) {
6579      "function" != typeof this[b] && (this[b] = null);
6580    }
6581  }, a.fn.owlCarousel.Constructor.Plugins.autoplay = e;
6582}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6583  "use strict";
6584
6585  var e = function e(b) {
6586    this._core = b, this._initialized = !1, this._pages = [], this._controls = {}, this._templates = [], this.$element = this._core.$element, this._overrides = {
6587      next: this._core.next,
6588      prev: this._core.prev,
6589      to: this._core.to
6590    }, this._handlers = {
6591      "prepared.owl.carousel": a.proxy(function (b) {
6592        b.namespace && this._core.settings.dotsData && this._templates.push('<div class="' + this._core.settings.dotClass + '">' + a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot") + "</div>");
6593      }, this),
6594      "added.owl.carousel": a.proxy(function (a) {
6595        a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 0, this._templates.pop());
6596      }, this),
6597      "remove.owl.carousel": a.proxy(function (a) {
6598        a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 1);
6599      }, this),
6600      "changed.owl.carousel": a.proxy(function (a) {
6601        a.namespace && "position" == a.property.name && this.draw();
6602      }, this),
6603      "initialized.owl.carousel": a.proxy(function (a) {
6604        a.namespace && !this._initialized && (this._core.trigger("initialize", null, "navigation"), this.initialize(), this.update(), this.draw(), this._initialized = !0, this._core.trigger("initialized", null, "navigation"));
6605      }, this),
6606      "refreshed.owl.carousel": a.proxy(function (a) {
6607        a.namespace && this._initialized && (this._core.trigger("refresh", null, "navigation"), this.update(), this.draw(), this._core.trigger("refreshed", null, "navigation"));
6608      }, this)
6609    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers);
6610  };
6611
6612  e.Defaults = {
6613    nav: !1,
6614    navText: ["prev", "next"],
6615    navSpeed: !1,
6616    navElement: "div",
6617    navContainer: !1,
6618    navContainerClass: "owl-nav",
6619    navClass: ["owl-prev", "owl-next"],
6620    slideBy: 1,
6621    dotClass: "owl-dot",
6622    dotsClass: "owl-dots",
6623    dots: !0,
6624    dotsEach: !1,
6625    dotsData: !1,
6626    dotsSpeed: !1,
6627    dotsContainer: !1
6628  }, e.prototype.initialize = function () {
6629    var b,
6630        c = this._core.settings;
6631    this._controls.$relative = (c.navContainer ? a(c.navContainer) : a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"), this._controls.$previous = a("<" + c.navElement + ">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click", a.proxy(function (a) {
6632      this.prev(c.navSpeed);
6633    }, this)), this._controls.$next = a("<" + c.navElement + ">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click", a.proxy(function (a) {
6634      this.next(c.navSpeed);
6635    }, this)), c.dotsData || (this._templates = [a("<div>").addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]), this._controls.$absolute = (c.dotsContainer ? a(c.dotsContainer) : a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"), this._controls.$absolute.on("click", "div", a.proxy(function (b) {
6636      var d = a(b.target).parent().is(this._controls.$absolute) ? a(b.target).index() : a(b.target).parent().index();
6637      b.preventDefault(), this.to(d, c.dotsSpeed);
6638    }, this));
6639
6640    for (b in this._overrides) {
6641      this._core[b] = a.proxy(this[b], this);
6642    }
6643  }, e.prototype.destroy = function () {
6644    var a, b, c, d;
6645
6646    for (a in this._handlers) {
6647      this.$element.off(a, this._handlers[a]);
6648    }
6649
6650    for (b in this._controls) {
6651      this._controls[b].remove();
6652    }
6653
6654    for (d in this.overides) {
6655      this._core[d] = this._overrides[d];
6656    }
6657
6658    for (c in Object.getOwnPropertyNames(this)) {
6659      "function" != typeof this[c] && (this[c] = null);
6660    }
6661  }, e.prototype.update = function () {
6662    var a,
6663        b,
6664        c,
6665        d = this._core.clones().length / 2,
6666        e = d + this._core.items().length,
6667        f = this._core.maximum(!0),
6668        g = this._core.settings,
6669        h = g.center || g.autoWidth || g.dotsData ? 1 : g.dotsEach || g.items;
6670
6671    if ("page" !== g.slideBy && (g.slideBy = Math.min(g.slideBy, g.items)), g.dots || "page" == g.slideBy) for (this._pages = [], a = d, b = 0, c = 0; a < e; a++) {
6672      if (b >= h || 0 === b) {
6673        if (this._pages.push({
6674          start: Math.min(f, a - d),
6675          end: a - d + h - 1
6676        }), Math.min(f, a - d) === f) break;
6677        b = 0, ++c;
6678      }
6679
6680      b += this._core.mergers(this._core.relative(a));
6681    }
6682  }, e.prototype.draw = function () {
6683    var b,
6684        c = this._core.settings,
6685        d = this._core.items().length <= c.items,
6686        e = this._core.relative(this._core.current()),
6687        f = c.loop || c.rewind;
6688
6689    this._controls.$relative.toggleClass("disabled", !c.nav || d), c.nav && (this._controls.$previous.toggleClass("disabled", !f && e <= this._core.minimum(!0)), this._controls.$next.toggleClass("disabled", !f && e >= this._core.maximum(!0))), this._controls.$absolute.toggleClass("disabled", !c.dots || d), c.dots && (b = this._pages.length - this._controls.$absolute.children().length, c.dotsData && 0 !== b ? this._controls.$absolute.html(this._templates.join("")) : b > 0 ? this._controls.$absolute.append(new Array(b + 1).join(this._templates[0])) : b < 0 && this._controls.$absolute.children().slice(b).remove(), this._controls.$absolute.find(".active").removeClass("active"), this._controls.$absolute.children().eq(a.inArray(this.current(), this._pages)).addClass("active"));
6690  }, e.prototype.onTrigger = function (b) {
6691    var c = this._core.settings;
6692    b.page = {
6693      index: a.inArray(this.current(), this._pages),
6694      count: this._pages.length,
6695      size: c && (c.center || c.autoWidth || c.dotsData ? 1 : c.dotsEach || c.items)
6696    };
6697  }, e.prototype.current = function () {
6698    var b = this._core.relative(this._core.current());
6699
6700    return a.grep(this._pages, a.proxy(function (a, c) {
6701      return a.start <= b && a.end >= b;
6702    }, this)).pop();
6703  }, e.prototype.getPosition = function (b) {
6704    var c,
6705        d,
6706        e = this._core.settings;
6707    return "page" == e.slideBy ? (c = a.inArray(this.current(), this._pages), d = this._pages.length, b ? ++c : --c, c = this._pages[(c % d + d) % d].start) : (c = this._core.relative(this._core.current()), d = this._core.items().length, b ? c += e.
6707slideBy : c -= e.slideBy), c;
6708  }, e.prototype.next = function (b) {
6709    a.proxy(this._overrides.to, this._core)(this.getPosition(!0), b);
6710  }, e.prototype.prev = function (b) {
6711    a.proxy(this._overrides.to, this._core)(this.getPosition(!1), b);
6712  }, e.prototype.to = function (b, c, d) {
6713    var e;
6714    !d && this._pages.length ? (e = this._pages.length, a.proxy(this._overrides.to, this._core)(this._pages[(b % e + e) % e].start, c)) : a.proxy(this._overrides.to, this._core)(b, c);
6715  }, a.fn.owlCarousel.Constructor.Plugins.Navigation = e;
6716}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6717  "use strict";
6718
6719  var e = function e(c) {
6720    this._core = c, this._hashes = {}, this.$element = this._core.$element, this._handlers = {
6721      "initialized.owl.carousel": a.proxy(function (c) {
6722        c.namespace && "URLHash" === this._core.settings.startPosition && a(b).trigger("hashchange.owl.navigation");
6723      }, this),
6724      "prepared.owl.carousel": a.proxy(function (b) {
6725        if (b.namespace) {
6726          var c = a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");
6727          if (!c) return;
6728          this._hashes[c] = b.content;
6729        }
6730      }, this),
6731      "changed.owl.carousel": a.proxy(function (c) {
6732        if (c.namespace && "position" === c.property.name) {
6733          var d = this._core.items(this._core.relative(this._core.current())),
6734              e = a.map(this._hashes, function (a, b) {
6735            return a === d ? b : null;
6736          }).join();
6737
6738          if (!e || b.location.hash.slice(1) === e) return;
6739          b.location.hash = e;
6740        }
6741      }, this)
6742    }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers), a(b).on("hashchange.owl.navigation", a.proxy(function (a) {
6743      var c = b.location.hash.substring(1),
6744          e = this._core.$stage.children(),
6745          f = this._hashes[c] && e.index(this._hashes[c]);
6746
6747      f !== d && f !== this._core.current() && this._core.to(this._core.relative(f), !1, !0);
6748    }, this));
6749  };
6750
6751  e.Defaults = {
6752    URLhashListener: !1
6753  }, e.prototype.destroy = function () {
6754    var c, d;
6755    a(b).off("hashchange.owl.navigation");
6756
6757    for (c in this._handlers) {
6758      this._core.$element.off(c, this._handlers[c]);
6759    }
6760
6761    for (d in Object.getOwnPropertyNames(this)) {
6762      "function" != typeof this[d] && (this[d] = null);
6763    }
6764  }, a.fn.owlCarousel.Constructor.Plugins.Hash = e;
6765}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) {
6766  function e(b, c) {
6767    var e = !1,
6768        f = b.charAt(0).toUpperCase() + b.slice(1);
6769    return a.each((b + " " + h.join(f + " ") + f).split(" "), function (a, b) {
6770      if (g[b] !== d) return e = !c || b, !1;
6771    }), e;
6772  }
6773
6774  function f(a) {
6775    return e(a, !0);
6776  }
6777
6778  var g = a("<support>").get(0).style,
6779      h = "Webkit Moz O ms".split(" "),
6780      i = {
6781    transition: {
6782      end: {
6783        WebkitTransition: "webkitTransitionEnd",
6784        MozTransition: "transitionend",
6785        OTransition: "oTransitionEnd",
6786        transition: "transitionend"
6787      }
6788    },
6789    animation: {
6790      end: {
6791        WebkitAnimation: "webkitAnimationEnd",
6792        MozAnimation: "animationend",
6793        OAnimation: "oAnimationEnd",
6794        animation: "animationend"
6795      }
6796    }
6797  },
6798      j = {
6799    csstransforms: function csstransforms() {
6800      return !!e("transform");
6801    },
6802    csstransforms3d: function csstransforms3d() {
6803      return !!e("perspective");
6804    },
6805    csstransitions: function csstransitions() {
6806      return !!e("transition");
6807    },
6808    cssanimations: function cssanimations() {
6809      return !!e("animation");
6810    }
6811  };
6812  j.csstransitions() && (a.support.transition = new String(f("transition")), a.support.transition.end = i.transition.end[a.support.transition]), j.cssanimations() && (a.support.animation = new String(f("animation")), a.support.animation.end = i.animation.end[a.support.animation]), j.csstransforms() && (a.support.transform = new String(f("transform")), a.support.transform3d = j.csstransforms3d());
6813}(window.Zepto || window.jQuery, window, document);
6814
6815/***/ }),
6816
6817/***/ "./resources/js/slider.js":
6818/*!********************************!*\
6819  !*** ./resources/js/slider.js ***!
6820  \********************************/
6821/***/ (() => {
6822
6823$('.owl-carousel').owlCarousel({
6824  loop: true,
6825  margin: 0,
6826  autoplay: true,
6827  autoplayTimeout: 6000,
6828  nav: true,
6829  navText: ['<i class="fa fa-angle-left"></i>', '<i class="fa fa-angle-right"></i>'],
6830  responsive: {
6831    0: {
6832      items: 1
6833    },
6834    600: {
6835      items: 1
6836    },
6837    1000: {
6838      items: 1
6839    }
6840  }
6841});
6842
6843/***/ }),
6844
6845/***/ "./resources/js/testimonial-slider.js":
6846/*!********************************************!*\
6847  !*** ./resources/js/testimonial-slider.js ***!
6848  \********************************************/
6849/***/ (() => {
6850
6851$('.owl-carousel').owlCarousel({
6852  loop: true,
6853  margin: 0,
6854  autoplay: true,
6855  autoplayTimeout: 3000,
6856  nav: true,
6857  navText: ['<i class="fa fa-angle-left"></i>', '<i class="fa fa-angle-right"></i>'],
6858  responsive: {
6859    0: {
6860      items: 1
6861    },
6862    600: {
6863      items: 1
6864    },
6865    1000: {
6866      items: 3
6867    }
6868  }
6869});
6870
6871/***/ }),
6872
vendor: 289,018 bytes, lines 6873-17763
6873/***/ "./node_modules/jquery/dist/jquery.js":
6874/*!********************************************!*\
6875  !*** ./node_modules/jquery/dist/jquery.js ***!
6876  \********************************************/
6877/***/ (function(module, exports) {
6878
6879var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
6880 * jQuery JavaScript Library v3.6.0
6881 * https://jquery.com/
6882 *
6883 * Includes Sizzle.js
6884 * https://sizzlejs.com/
6885 *
6886 * Copyright OpenJS Foundation and other contributors
6887 * Released under the MIT license
6888 * https://jquery.org/license
6889 *
6890 * Date: 2021-03-02T17:08Z
6891 */
6892( function( global, factory ) {
6893
6894	"use strict";
6895
6896	if (  true && typeof module.exports === "object" ) {
6897
6898		// For CommonJS and CommonJS-like environments where a proper `window`
6899		// is present, execute the factory and get jQuery.
6900		// For environments that do not have a `window` with a `document`
6901		// (such as Node.js), expose a factory as module.exports.
6902		// This accentuates the need for the creation of a real `window`.
6903		// e.g. var jQuery = require("jquery")(window);
6904		// See ticket #14549 for more info.
6905		module.exports = global.document ?
6906			factory( global, true ) :
6907			function( w ) {
6908				if ( !w.document ) {
6909					throw new Error( "jQuery requires a window with a document" );
6910				}
6911				return factory( w );
6912			};
6913	} else {
6914		factory( global );
6915	}
6916
6917// Pass this if window is not defined yet
6918} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
6919
6920// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
6921// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
6922// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
6923// enough that all such attempts are guarded in a try block.
6924"use strict";
6925
6926var arr = [];
6927
6928var getProto = Object.getPrototypeOf;
6929
6930var slice = arr.slice;
6931
6932var flat = arr.flat ? function( array ) {
6933	return arr.flat.call( array );
6934} : function( array ) {
6935	return arr.concat.apply( [], array );
6936};
6937
6938
6939var push = arr.push;
6940
6941var indexOf = arr.indexOf;
6942
6943var class2type = {};
6944
6945var toString = class2type.toString;
6946
6947var hasOwn = class2type.hasOwnProperty;
6948
6949var fnToString = hasOwn.toString;
6950
6951var ObjectFunctionString = fnToString.call( Object );
6952
6953var support = {};
6954
6955var isFunction = function isFunction( obj ) {
6956
6957		// Support: Chrome <=57, Firefox <=52
6958		// In some browsers, typeof returns "function" for HTML <object> elements
6959		// (i.e., `typeof document.createElement( "object" ) === "function"`).
6960		// We don't want to classify *any* DOM node as a function.
6961		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
6962		// Plus for old WebKit, typeof returns "function" for HTML collections
6963		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
6964		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
6965			typeof obj.item !== "function";
6966	};
6967
6968
6969var isWindow = function isWindow( obj ) {
6970		return obj != null && obj === obj.window;
6971	};
6972
6973
6974var document = window.document;
6975
6976
6977
6978	var preservedScriptAttributes = {
6979		type: true,
6980		src: true,
6981		nonce: true,
6982		noModule: true
6983	};
6984
6985	function DOMEval( code, node, doc ) {
6986		doc = doc || document;
6987
6988		var i, val,
6989			script = doc.createElement( "script" );
6990
6991		script.text = code;
6992		if ( node ) {
6993			for ( i in preservedScriptAttributes ) {
6994
6995				// Support: Firefox 64+, Edge 18+
6996				// Some browsers don't support the "nonce" property on scripts.
6997				// On the other hand, just using `getAttribute` is not enough as
6998				// the `nonce` attribute is reset to an empty string whenever it
6999				// becomes browsing-context connected.
7000				// See https://github.com/whatwg/html/issues/2369
7001				// See https://html.spec.whatwg.org/#nonce-attributes
7002				// The `node.getAttribute` check was added for the sake of
7003				// `jQuery.globalEval` so that it can fake a nonce-containing node
7004				// via an object.
7005				val = node[ i ] || node.getAttribute && node.getAttribute( i );
7006				if ( val ) {
7007					script.setAttribute( i, val );
7008				}
7009			}
7010		}
7011		doc.head.appendChild( script ).parentNode.removeChild( script );
7012	}
7013
7014
7015function toType( obj ) {
7016	if ( obj == null ) {
7017		return obj + "";
7018	}
7019
7020	// Support: Android <=2.3 only (functionish RegExp)
7021	return typeof obj === "object" || typeof obj === "function" ?
7022		class2type[ toString.call( obj ) ] || "object" :
7023		typeof obj;
7024}
7025/* global Symbol */
7026// Defining this global in .eslintrc.json would create a danger of using the global
7027// unguarded in another place, it seems safer to define global only for this module
7028
7029
7030
7031var
7032	version = "3.6.0",
7033
7034	// Define a local copy of jQuery
7035	jQuery = function( selector, context ) {
7036
7037		// The jQuery object is actually just the init constructor 'enhanced'
7038		// Need init if jQuery is called (just allow error to be thrown if not included)
7039		return new jQuery.fn.init( selector, context );
7040	};
7041
7042jQuery.fn = jQuery.prototype = {
7043
7044	// The current version of jQuery being used
7045	jquery: version,
7046
7047	constructor: jQuery,
7048
7049	// The default length of a jQuery object is 0
7050	length: 0,
7051
7052	toArray: function() {
7053		return slice.call( this );
7054	},
7055
7056	// Get the Nth element in the matched element set OR
7057	// Get the whole matched element set as a clean array
7058	get: function( num ) {
7059
7060		// Return all the elements in a clean array
7061		if ( num == null ) {
7062			return slice.call( this );
7063		}
7064
7065		// Return just the one element from the set
7066		return num < 0 ? this[ num + this.length ] : this[ num ];
7067	},
7068
7069	// Take an array of elements and push it onto the stack
7070	// (returning the new matched element set)
7071	pushStack: function( elems ) {
7072
7073		// Build a new jQuery matched element set
7074		var ret = jQuery.merge( this.constructor(), elems );
7075
7076		// Add the old object onto the stack (as a reference)
7077		ret.prevObject = this;
7078
7079		// Return the newly-formed element set
7080		return ret;
7081	},
7082
7083	// Execute a callback for every element in the matched set.
7084	each: function( callback ) {
7085		return jQuery.each( this, callback );
7086	},
7087
7088	map: function( callback ) {
7089		return this.pushStack( jQuery.map( this, function( elem, i ) {
7090			return callback.call( elem, i, elem );
7091		} ) );
7092	},
7093
7094	slice: function() {
7095		return this.pushStack( slice.apply( this, arguments ) );
7096	},
7097
7098	first: function() {
7099		return this.eq( 0 );
7100	},
7101
7102	last: function() {
7103		return this.eq( -1 );
7104	},
7105
7106	even: function() {
7107		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
7108			return ( i + 1 ) % 2;
7109		} ) );
7110	},
7111
7112	odd: function() {
7113		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
7114			return i % 2;
7115		} ) );
7116	},
7117
7118	eq: function( i ) {
7119		var len = this.length,
7120			j = +i + ( i < 0 ? len : 0 );
7121		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
7122	},
7123
7124	end: function() {
7125		return this.prevObject || this.constructor();
7126	},
7127
7128	// For internal use only.
7129	// Behaves like an Array's method, not like a jQuery method.
7130	push: push,
7131	sort: arr.sort,
7132	splice: arr.splice
7133};
7134
7135jQuery.extend = jQuery.fn.extend = function() {
7136	var options, name, src, copy, copyIsArray, clone,
7137		target = arguments[ 0 ] || {},
7138		i = 1,
7139		length = arguments.length,
7140		deep = false;
7141
7142	// Handle a deep copy situation
7143	if ( typeof target === "boolean" ) {
7144		deep = target;
7145
7146		// Skip the boolean and the target
7147		target = arguments[ i ] || {};
7148		i++;
7149	}
7150
7151	// Handle case when target is a string or something (possible in deep copy)
7152	if ( typeof target !== "object" && !isFunction( target ) ) {
7153		target = {};
7154	}
7155
7156	// Extend jQuery itself if only one argument is passed
7157	if ( i === length ) {
7158		target = this;
7159		i--;
7160	}
7161
7162	for ( ; i < length; i++ ) {
7163
7164		// Only deal with non-null/undefined values
7165		if ( ( options = arguments[ i ] ) != null ) {
7166
7167			// Extend the base object
7168			for ( name in options ) {
7169				copy = options[ name ];
7170
7171				// Prevent Object.prototype pollution
7172				// Prevent never-ending loop
7173				if ( name === "__proto__" || target === copy ) {
7174					continue;
7175				}
7176
7177				// Recurse if we're merging plain objects or arrays
7178				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
7179					( copyIsArray = Array.isArray( copy ) ) ) ) {
7180					src = target[ name ];
7181
7182					// Ensure proper type for the source value
7183					if ( copyIsArray && !Array.isArray( src ) ) {
7184						clone = [];
7185					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
7186						clone = {};
7187					} else {
7188						clone = src;
7189					}
7190					copyIsArray = false;
7191
7192					// Never move original objects, clone them
7193					target[ name ] = jQuery.extend( deep, clone, copy );
7194
7195				// Don't bring in undefined values
7196				} else if ( copy !== undefined ) {
7197					target[ name ] = copy;
7198				}
7199			}
7200		}
7201	}
7202
7203	// Return the modified object
7204	return target;
7205};
7206
7207jQuery.extend( {
7208
7209	// Unique for each copy of jQuery on the page
7210	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
7211
7212	// Assume jQuery is ready without the ready module
7213	isReady: true,
7214
7215	error: function( msg ) {
7216		throw new Error( msg );
7217	},
7218
7219	noop: function() {},
7220
7221	isPlainObject: function( obj ) {
7222		var proto, Ctor;
7223
7224		// Detect obvious negatives
7225		// Use toString instead of jQuery.type to catch host objects
7226		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
7227			return false;
7228		}
7229
7230		proto = getProto( obj );
7231
7232		// Objects with no prototype (e.g., `Object.create( null )`) are plain
7233		if ( !proto ) {
7234			return true;
7235		}
7236
7237		// Objects with prototype are plain iff they were constructed by a global Object function
7238		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
7239		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
7240	},
7241
7242	isEmptyObject: function( obj ) {
7243		var name;
7244
7245		for ( name in obj ) {
7246			return false;
7247		}
7248		return true;
7249	},
7250
7251	// Evaluates a script in a provided context; falls back to the global one
7252	// if not specified.
7253	globalEval: function( code, options, doc ) {
7254		DOMEval( code, { nonce: options && options.nonce }, doc );
7255	},
7256
7257	each: function( obj, callback ) {
7258		var length, i = 0;
7259
7260		if ( isArrayLike( obj ) ) {
7261			length = obj.length;
7262			for ( ; i < length; i++ ) {
7263				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
7264					break;
7265				}
7266			}
7267		} else {
7268			for ( i in obj ) {
7269				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
7270					break;
7271				}
7272			}
7273		}
7274
7275		return obj;
7276	},
7277
7278	// results is for internal usage only
7279	makeArray: function( arr, results ) {
7280		var ret = results || [];
7281
7282		if ( arr != null ) {
7283			if ( isArrayLike( Object( arr ) ) ) {
7284				jQuery.merge( ret,
7285					typeof arr === "string" ?
7286						[ arr ] : arr
7287				);
7288			} else {
7289				push.call( ret, arr );
7290			}
7291		}
7292
7293		return ret;
7294	},
7295
7296	inArray: function( elem, arr, i ) {
7297		return arr == null ? -1 : indexOf.call( arr, elem, i );
7298	},
7299
7300	// Support: Android <=4.0 only, PhantomJS 1 only
7301	// push.apply(_, arraylike) throws on ancient WebKit
7302	merge: function( first, second ) {
7303		var len = +second.length,
7304			j = 0,
7305			i = first.length;
7306
7307		for ( ; j < len; j++ ) {
7308			first[ i++ ] = second[ j ];
7309		}
7310
7311		first.length = i;
7312
7313		return first;
7314	},
7315
7316	grep: function( elems, callback, invert ) {
7317		var callbackInverse,
7318			matches = [],
7319			i = 0,
7320			length = elems.length,
7321			callbackExpect = !invert;
7322
7323		// Go through the array, only saving the items
7324		// that pass the validator function
7325		for ( ; i < length; i++ ) {
7326			callbackInverse = !callback( elems[ i ], i );
7327			if ( callbackInverse !== callbackExpect ) {
7328				matches.push( elems[ i ] );
7329			}
7330		}
7331
7332		return matches;
7333	},
7334
7335	// arg is for internal usage only
7336	map: function( elems, callback, arg ) {
7337		var length, value,
7338			i = 0,
7339			ret = [];
7340
7341		// Go through the array, translating each of the items to their new values
7342		if ( isArrayLike( elems ) ) {
7343			length = elems.length;
7344			for ( ; i < length; i++ ) {
7345				value = callback( elems[ i ], i, arg );
7346
7347				if ( value != null ) {
7348					ret.push( value );
7349				}
7350			}
7351
7352		// Go through every key on the object,
7353		} else {
7354			for ( i in elems ) {
7355				value = callback( elems[ i ], i, arg );
7356
7357				if ( value != null ) {
7358					ret.push( value );
7359				}
7360			}
7361		}
7362
7363		// Flatten any nested arrays
7364		return flat( ret );
7365	},
7366
7367	// A global GUID counter for objects
7368	guid: 1,
7369
7370	// jQuery.support is not used in Core but other projects attach their
7371	// properties to it so it needs to exist.
7372	support: support
7373} );
7374
7375if ( typeof Symbol === "function" ) {
7376	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
7377}
7378
7379// Populate the class2type map
7380jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
7381	function( _i, name ) {
7382		class2type[ "[object " + name + "]" ] = name.toLowerCase();
7383	} );
7384
7385function isArrayLike( obj ) {
7386
7387	// Support: real iOS 8.2 only (not reproducible in simulator)
7388	// `in` check used to prevent JIT error (gh-2145)
7389	// hasOwn isn't used here due to false negatives
7390	// regarding Nodelist length in IE
7391	var length = !!obj && "length" in obj && obj.length,
7392		type = toType( obj );
7393
7394	if ( isFunction( obj ) || isWindow( obj ) ) {
7395		return false;
7396	}
7397
7398	return type === "array" || length === 0 ||
7399		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
7400}
7401var Sizzle =
7402/*!
7403 * Sizzle CSS Selector Engine v2.3.6
7404 * https://sizzlejs.com/
7405 *
7406 * Copyright JS Foundation and other contributors
7407 * Released under the MIT license
7408 * https://js.foundation/
7409 *
7410 * Date: 2021-02-16
7411 */
7412( function( window ) {
7413var i,
7414	support,
7415	Expr,
7416	getText,
7417	isXML,
7418	tokenize,
7419	compile,
7420	select,
7421	outermostContext,
7422	sortInput,
7423	hasDuplicate,
7424
7425	// Local document vars
7426	setDocument,
7427	document,
7428	docElem,
7429	documentIsHTML,
7430	rbuggyQSA,
7431	rbuggyMatches,
7432	matches,
7433	contains,
7434
7435	// Instance-specific data
7436	expando = "sizzle" + 1 * new Date(),
7437	preferredDoc = window.document,
7438	dirruns = 0,
7439	done = 0,
7440	classCache = createCache(),
7441	tokenCache = createCache(),
7442	compilerCache = createCache(),
7443	nonnativeSelectorCache = createCache(),
7444	sortOrder = function( a, b ) {
7445		if ( a === b ) {
7446			hasDuplicate = true;
7447		}
7448		return 0;
7449	},
7450
7451	// Instance methods
7452	hasOwn = ( {} ).hasOwnProperty,
7453	arr = [],
7454	pop = arr.pop,
7455	pushNative = arr.push,
7456	push = arr.push,
7457	slice = arr.slice,
7458
7459	// Use a stripped-down indexOf as it's faster than native
7460	// https://jsperf.com/thor-indexof-vs-for/5
7461	indexOf = function( list, elem ) {
7462		var i = 0,
7463			len = list.length;
7464		for ( ; i < len; i++ ) {
7465			if ( list[ i ] === elem ) {
7466				return i;
7467			}
7468		}
7469		return -1;
7470	},
7471
7472	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
7473		"ismap|loop|multiple|open|readonly|required|scoped",
7474
7475	// Regular expressions
7476
7477	// http://www.w3.org/TR/css3-selectors/#whitespace
7478	whitespace = "[\\x20\\t\\r\\n\\f]",
7479
7480	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
7481	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
7482		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
7483
7484	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
7485	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
7486
7487		// Operator (capture 2)
7488		"*([*^$|!~]?=)" + whitespace +
7489
7490		// "Attribute values must be CSS identifiers [capture 5]
7491		// or strings [capture 3 or capture 4]"
7492		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
7493		whitespace + "*\\]",
7494
7495	pseudos = ":(" + identifier + ")(?:\\((" +
7496
7497		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
7498		// 1. quoted (capture 3; capture 4 or capture 5)
7499		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
7500
7501		// 2. simple (capture 6)
7502		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
7503
7504		// 3. anything else (capture 2)
7505		".*" +
7506		")\\)|)",
7507
7508	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
7509	rwhitespace = new RegExp( whitespace + "+", "g" ),
7510	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
7511		whitespace + "+$", "g" ),
7512
7513	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
7514	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
7515		"*" ),
7516	rdescend = new RegExp( whitespace + "|>" ),
7517
7518	rpseudo = new RegExp( pseudos ),
7519	ridentifier = new RegExp( "^" + identifier + "$" ),
7520
7521	matchExpr = {
7522		"ID": new RegExp( "^#(" + identifier + ")" ),
7523		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
7524		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
7525		"ATTR": new RegExp( "^" + attributes ),
7526		"PSEUDO": new RegExp( "^" + pseudos ),
7527		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
7528			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
7529			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
7530		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
7531
7532		// For use in libraries implementing .is()
7533		// We use this for POS matching in `select`
7534		"needsContext": new RegExp( "^" + whitespace +
7535			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
7536			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
7537	},
7538
7539	rhtml = /HTML$/i,
7540	rinputs = /^(?:input|select|textarea|button)$/i,
7541	rheader = /^h\d$/i,
7542
7543	rnative = /^[^{]+\{\s*\[native \w/,
7544
7545	// Easily-parseable/retrievable ID or TAG or CLASS selectors
7546	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
7547
7548	rsibling = /[+~]/,
7549
7550	// CSS escapes
7551	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
7552	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
7553	funescape = function( escape, nonHex ) {
7554		var high = "0x" + escape.slice( 1 ) - 0x10000;
7555
7556		return nonHex ?
7557
7558			// Strip the backslash prefix from a non-hex escape sequence
7559			nonHex :
7560
7561			// Replace a hexadecimal escape sequence with the encoded Unicode code point
7562			// Support: IE <=11+
7563			// For values outside the Basic Multilingual Plane (BMP), manually construct a
7564			// surrogate pair
7565			high < 0 ?
7566				String.fromCharCode( high + 0x10000 ) :
7567				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
7568	},
7569
7570	// CSS string/identifier serialization
7571	// https://drafts.csswg.org/cssom/#common-serializing-idioms
7572	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
7573	fcssescape = function( ch, asCodePoint ) {
7574		if ( asCodePoint ) {
7575
7576			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
7577			if ( ch === "\0" ) {
7578				return "\uFFFD";
7579			}
7580
7581			// Control characters and (dependent upon position) numbers get escaped as code points
7582			return ch.slice( 0, -1 ) + "\\" +
7583				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
7584		}
7585
7586		// Other potentially-special ASCII characters get backslash-escaped
7587		return "\\" + ch;
7588	},
7589
7590	// Used for iframes
7591	// See setDocument()
7592	// Removing the function wrapper causes a "Permission Denied"
7593	// error in IE
7594	unloadHandler = function() {
7595		setDocument();
7596	},
7597
7598	inDisabledFieldset = addCombinator(
7599		function( elem ) {
7600			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
7601		},
7602		{ dir: "parentNode", next: "legend" }
7603	);
7604
7605// Optimize for push.apply( _, NodeList )
7606try {
7607	push.apply(
7608		( arr = slice.call( preferredDoc.childNodes ) ),
7609		preferredDoc.childNodes
7610	);
7611
7612	// Support: Android<4.0
7613	// Detect silently failing push.apply
7614	// eslint-disable-next-line no-unused-expressions
7615	arr[ preferredDoc.childNodes.length ].nodeType;
7616} catch ( e ) {
7617	push = { apply: arr.length ?
7618
7619		// Leverage slice if possible
7620		function( target, els ) {
7621			pushNative.apply( target, slice.call( els ) );
7622		} :
7623
7624		// Support: IE<9
7625		// Otherwise append directly
7626		function( target, els ) {
7627			var j = target.length,
7628				i = 0;
7629
7630			// Can't trust NodeList.length
7631			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
7632			target.length = j - 1;
7633		}
7634	};
7635}
7636
7637function Sizzle( selector, context, results, seed ) {
7638	var m, i, elem, nid, match, groups, newSelector,
7639		newContext = context && context.ownerDocument,
7640
7641		// nodeType defaults to 9, since context defaults to document
7642		nodeType = context ? context.nodeType : 9;
7643
7644	results = results || [];
7645
7646	// Return early from calls with invalid selector or context
7647	if ( typeof selector !== "string" || !selector ||
7648		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
7649
7650		return results;
7651	}
7652
7653	// Try to shortcut find operations (as opposed to filters) in HTML documents
7654	if ( !seed ) {
7655		setDocument( context );
7656		context = context || document;
7657
7658		if ( documentIsHTML ) {
7659
7660			// If the selector is sufficiently simple, try using a "get*By*" DOM method
7661			// (excepting DocumentFragment context, where the methods don't exist)
7662			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
7663
7664				// ID selector
7665				if ( ( m = match[ 1 ] ) ) {
7666
7667					// Document context
7668					if ( nodeType === 9 ) {
7669						if ( ( elem = context.getElementById( m ) ) ) {
7670
7671							// Support: IE, Opera, Webkit
7672							// TODO: identify versions
7673							// getElementById can match elements by name instead of ID
7674							if ( elem.id === m ) {
7675								results.push( elem );
7676								return results;
7677							}
7678						} else {
7679							return results;
7680						}
7681
7682					// Element context
7683					} else {
7684
7685						// Support: IE, Opera, Webkit
7686						// TODO: identify versions
7687						// getElementById can match elements by name instead of ID
7688						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
7689							contains( context, elem ) &&
7690							elem.id === m ) {
7691
7692							results.push( elem );
7693							return results;
7694						}
7695					}
7696
7697				// Type selector
7698				} else if ( match[ 2 ] ) {
7699					push.apply( results, context.getElementsByTagName( selector ) );
7700					return results;
7701
7702				// Class selector
7703				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
7704					context.getElementsByClassName ) {
7705
7706					push.apply( results, context.getElementsByClassName( m ) );
7707					return results;
7708				}
7709			}
7710
7711			// Take advantage of querySelectorAll
7712			if ( support.qsa &&
7713				!nonnativeSelectorCache[ selector + " " ] &&
7714				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
7715
7716				// Support: IE 8 only
7717				// Exclude object elements
7718				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
7719
7720				newSelector = selector;
7721				newContext = context;
7722
7723				// qSA considers elements outside a scoping root when evaluating child or
7724				// descendant combinators, which is not what we want.
7725				// In such cases, we work around the behavior by prefixing every selector in the
7726				// list with an ID selector referencing the scope context.
7727				// The technique has to be used as well when a leading combinator is used
7728				// as such selectors are not recognized by querySelectorAll.
7729				// Thanks to Andrew Dupont for this technique.
7730				if ( nodeType === 1 &&
7731					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
7732
7733					// Expand context for sibling selectors
7734					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
7735						context;
7736
7737					// We can use :scope instead of the ID hack if the browser
7738					// supports it & if we're not changing the context.
7739					if ( newContext !== context || !support.scope ) {
7740
7741						// Capture the context ID, setting it first if necessary
7742						if ( ( nid = context.getAttribute( "id" ) ) ) {
7743							nid = nid.replace( rcssescape, fcssescape );
7744						} else {
7745							context.setAttribute( "id", ( nid = expando ) );
7746						}
7747					}
7748
7749					// Prefix every selector in the list
7750					groups = tokenize( selector );
7751					i = groups.length;
7752					while ( i-- ) {
7753						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
7754							toSelector( groups[ i ] );
7755					}
7756					newSelector = groups.join( "," );
7757				}
7758
7759				try {
7760					push.apply( results,
7761						newContext.querySelectorAll( newSelector )
7762					);
7763					return results;
7764				} catch ( qsaError ) {
7765					nonnativeSelectorCache( selector, true );
7766				} finally {
7767					if ( nid === expando ) {
7768						context.removeAttribute( "id" );
7769					}
7770				}
7771			}
7772		}
7773	}
7774
7775	// All others
7776	return select( selector.replace( rtrim, "$1" ), context, results, seed );
7777}
7778
7779/**
7780 * Create key-value caches of limited size
7781 * @returns {function(string, object)} Returns the Object data after storing it on itself with
7782 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
7783 *	deleting the oldest entry
7784 */
7785function createCache() {
7786	var keys = [];
7787
7788	function cache( key, value ) {
7789
7790		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
7791		if ( keys.push( key + " " ) > Expr.cacheLength ) {
7792
7793			// Only keep the most recent entries
7794			delete cache[ keys.shift() ];
7795		}
7796		return ( cache[ key + " " ] = value );
7797	}
7798	return cache;
7799}
7800
7801/**
7802 * Mark a function for special use by Sizzle
7803 * @param {Function} fn The function to mark
7804 */
7805function markFunction( fn ) {
7806	fn[ expando ] = true;
7807	return fn;
7808}
7809
7810/**
7811 * Support testing using an element
7812 * @param {Function} fn Passed the created element and returns a boolean result
7813 */
7814function assert( fn ) {
7815	var el = document.createElement( "fieldset" );
7816
7817	try {
7818		return !!fn( el );
7819	} catch ( e ) {
7820		return false;
7821	} finally {
7822
7823		// Remove from its parent by default
7824		if ( el.parentNode ) {
7825			el.parentNode.removeChild( el );
7826		}
7827
7828		// release memory in IE
7829		el = null;
7830	}
7831}
7832
7833/**
7834 * Adds the same handler for all of the specified attrs
7835 * @param {String} attrs Pipe-separated list of attributes
7836 * @param {Function} handler The method that will be applied
7837 */
7838function addHandle( attrs, handler ) {
7839	var arr = attrs.split( "|" ),
7840		i = arr.length;
7841
7842	while ( i-- ) {
7843		Expr.attrHandle[ arr[ i ] ] = handler;
7844	}
7845}
7846
7847/**
7848 * Checks document order of two siblings
7849 * @param {Element} a
7850 * @param {Element} b
7851 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
7852 */
7853function siblingCheck( a, b ) {
7854	var cur = b && a,
7855		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
7856			a.sourceIndex - b.sourceIndex;
7857
7858	// Use IE sourceIndex if available on both nodes
7859	if ( diff ) {
7860		return diff;
7861	}
7862
7863	// Check if b follows a
7864	if ( cur ) {
7865		while ( ( cur = cur.nextSibling ) ) {
7866			if ( cur === b ) {
7867				return -1;
7868			}
7869		}
7870	}
7871
7872	return a ? 1 : -1;
7873}
7874
7875/**
7876 * Returns a function to use in pseudos for input types
7877 * @param {String} type
7878 */
7879function createInputPseudo( type ) {
7880	return function( elem ) {
7881		var name = elem.nodeName.toLowerCase();
7882		return name === "input" && elem.type === type;
7883	};
7884}
7885
7886/**
7887 * Returns a function to use in pseudos for buttons
7888 * @param {String} type
7889 */
7890function createButtonPseudo( type ) {
7891	return function( elem ) {
7892		var name = elem.nodeName.toLowerCase();
7893		return ( name === "input" || name === "button" ) && elem.type === type;
7894	};
7895}
7896
7897/**
7898 * Returns a function to use in pseudos for :enabled/:disabled
7899 * @param {Boolean} disabled true for :disabled; false for :enabled
7900 */
7901function createDisabledPseudo( disabled ) {
7902
7903	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
7904	return function( elem ) {
7905
7906		// Only certain elements can match :enabled or :disabled
7907		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
7908		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
7909		if ( "form" in elem ) {
7910
7911			// Check for inherited disabledness on relevant non-disabled elements:
7912			// * listed form-associated elements in a disabled fieldset
7913			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
7914			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
7915			// * option elements in a disabled optgroup
7916			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
7917			// All such elements have a "form" property.
7918			if ( elem.parentNode && elem.disabled === false ) {
7919
7920				// Option elements defer to a parent optgroup if present
7921				if ( "label" in elem ) {
7922					if ( "label" in elem.parentNode ) {
7923						return elem.parentNode.disabled === disabled;
7924					} else {
7925						return elem.disabled === disabled;
7926					}
7927				}
7928
7929				// Support: IE 6 - 11
7930				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
7931				return elem.isDisabled === disabled ||
7932
7933					// Where there is no isDisabled, check manually
7934					/* jshint -W018 */
7935					elem.isDisabled !== !disabled &&
7936					inDisabledFieldset( elem ) === disabled;
7937			}
7938
7939			return elem.disabled === disabled;
7940
7941		// Try to winnow out elements that can't be disabled before trusting the disabled property.
7942		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
7943		// even exist on them, let alone have a boolean value.
7944		} else if ( "label" in elem ) {
7945			return elem.disabled === disabled;
7946		}
7947
7948		// Remaining elements are neither :enabled nor :disabled
7949		return false;
7950	};
7951}
7952
7953/**
7954 * Returns a function to use in pseudos for positionals
7955 * @param {Function} fn
7956 */
7957function createPositionalPseudo( fn ) {
7958	return markFunction( function( argument ) {
7959		argument = +argument;
7960		return markFunction( function( seed, matches ) {
7961			var j,
7962				matchIndexes = fn( [], seed.length, argument ),
7963				i = matchIndexes.length;
7964
7965			// Match elements found at the specified indexes
7966			while ( i-- ) {
7967				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
7968					seed[ j ] = !( matches[ j ] = seed[ j ] );
7969				}
7970			}
7971		} );
7972	} );
7973}
7974
7975/**
7976 * Checks a node for validity as a Sizzle context
7977 * @param {Element|Object=} context
7978 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
7979 */
7980function testContext( context ) {
7981	return context && typeof context.getElementsByTagName !== "undefined" && context;
7982}
7983
7984// Expose support vars for convenience
7985support = Sizzle.support = {};
7986
7987/**
7988 * Detects XML nodes
7989 * @param {Element|Object} elem An element or a document
7990 * @returns {Boolean} True iff elem is a non-HTML XML node
7991 */
7992isXML = Sizzle.isXML = function( elem ) {
7993	var namespace = elem && elem.namespaceURI,
7994		docElem = elem && ( elem.ownerDocument || elem ).documentElement;
7995
7996	// Support: IE <=8
7997	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
7998	// https://bugs.jquery.com/ticket/4833
7999	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
8000};
8001
8002/**
8003 * Sets document-related variables once based on the current document
8004 * @param {Element|Object} [doc] An element or document object to use to set the document
8005 * @returns {Object} Returns the current document
8006 */
8007setDocument = Sizzle.setDocument = function( node ) {
8008	var hasCompare, subWindow,
8009		doc = node ? node.ownerDocument || node : preferredDoc;
8010
8011	// Return early if doc is invalid or already selected
8012	// Support: IE 11+, Edge 17 - 18+
8013	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8014	// two documents; shallow comparisons work.
8015	// eslint-disable-next-line eqeqeq
8016	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
8017		return document;
8018	}
8019
8020	// Update global variables
8021	document = doc;
8022	docElem = document.documentElement;
8023	documentIsHTML = !isXML( document );
8024
8025	// Support: IE 9 - 11+, Edge 12 - 18+
8026	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
8027	// Support: IE 11+, Edge 17 - 18+
8028	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8029	// two documents; shallow comparisons work.
8030	// eslint-disable-next-line eqeqeq
8031	if ( preferredDoc != document &&
8032		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
8033
8034		// Support: IE 11, Edge
8035		if ( subWindow.addEventListener ) {
8036			subWindow.addEventListener( "unload", unloadHandler, false );
8037
8038		// Support: IE 9 - 10 only
8039		} else if ( subWindow.attachEvent ) {
8040			subWindow.attachEvent( "onunload", unloadHandler );
8041		}
8042	}
8043
8044	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
8045	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
8046	// IE/Edge & older browsers don't support the :scope pseudo-class.
8047	// Support: Safari 6.0 only
8048	// Safari 6.0 supports :scope but it's an alias of :root there.
8049	support.scope = assert( function( el ) {
8050		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
8051		return typeof el.querySelectorAll !== "undefined" &&
8052			!el.querySelectorAll( ":scope fieldset div" ).length;
8053	} );
8054
8055	/* Attributes
8056	---------------------------------------------------------------------- */
8057
8058	// Support: IE<8
8059	// Verify that getAttribute really returns attributes and not properties
8060	// (excepting IE8 booleans)
8061	support.attributes = assert( function( el ) {
8062		el.className = "i";
8063		return !el.getAttribute( "className" );
8064	} );
8065
8066	/* getElement(s)By*
8067	---------------------------------------------------------------------- */
8068
8069	// Check if getElementsByTagName("*") returns only elements
8070	support.getElementsByTagName = assert( function( el ) {
8071		el.appendChild( document.createComment( "" ) );
8072		return !el.getElementsByTagName( "*" ).length;
8073	} );
8074
8075	// Support: IE<9
8076	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
8077
8078	// Support: IE<10
8079	// Check if getElementById returns elements by name
8080	// The broken getElementById methods don't pick up programmatically-set names,
8081	// so use a roundabout getElementsByName test
8082	support.getById = assert( function( el ) {
8083		docElem.appendChild( el ).id = expando;
8084		return !document.getElementsByName || !document.getElementsByName( expando ).length;
8085	} );
8086
8087	// ID filter and find
8088	if ( support.getById ) {
8089		Expr.filter[ "ID" ] = function( id ) {
8090			var attrId = id.replace( runescape, funescape );
8091			return function( elem ) {
8092				return elem.getAttribute( "id" ) === attrId;
8093			};
8094		};
8095		Expr.find[ "ID" ] = function( id, context ) {
8096			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
8097				var elem = context.getElementById( id );
8098				return elem ? [ elem ] : [];
8099			}
8100		};
8101	} else {
8102		Expr.filter[ "ID" ] =  function( id ) {
8103			var attrId = id.replace( runescape, funescape );
8104			return function( elem ) {
8105				var node = typeof elem.getAttributeNode !== "undefined" &&
8106					elem.getAttributeNode( "id" );
8107				return node && node.value === attrId;
8108			};
8109		};
8110
8111		// Support: IE 6 - 7 only
8112		// getElementById is not reliable as a find shortcut
8113		Expr.find[ "ID" ] = function( id, context ) {
8114			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
8115				var node, i, elems,
8116					elem = context.getElementById( id );
8117
8118				if ( elem ) {
8119
8120					// Verify the id attribute
8121					node = elem.getAttributeNode( "id" );
8122					if ( node && node.value === id ) {
8123						return [ elem ];
8124					}
8125
8126					// Fall back on getElementsByName
8127					elems = context.getElementsByName( id );
8128					i = 0;
8129					while ( ( elem = elems[ i++ ] ) ) {
8130						node = elem.getAttributeNode( "id" );
8131						if ( node && node.value === id ) {
8132							return [ elem ];
8133						}
8134					}
8135				}
8136
8137				return [];
8138			}
8139		};
8140	}
8141
8142	// Tag
8143	Expr.find[ "TAG" ] = support.getElementsByTagName ?
8144		function( tag, context ) {
8145			if ( typeof context.getElementsByTagName !== "undefined" ) {
8146				return context.getElementsByTagName( tag );
8147
8148			// DocumentFragment nodes don't have gEBTN
8149			} else if ( support.qsa ) {
8150				return context.querySelectorAll( tag );
8151			}
8152		} :
8153
8154		function( tag, context ) {
8155			var elem,
8156				tmp = [],
8157				i = 0,
8158
8159				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
8160				results = context.getElementsByTagName( tag );
8161
8162			// Filter out possible comments
8163			if ( tag === "*" ) {
8164				while ( ( elem = results[ i++ ] ) ) {
8165					if ( elem.nodeType === 1 ) {
8166						tmp.push( elem );
8167					}
8168				}
8169
8170				return tmp;
8171			}
8172			return results;
8173		};
8174
8175	// Class
8176	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
8177		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
8178			return context.getElementsByClassName( className );
8179		}
8180	};
8181
8182	/* QSA/matchesSelector
8183	---------------------------------------------------------------------- */
8184
8185	// QSA and matchesSelector support
8186
8187	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
8188	rbuggyMatches = [];
8189
8190	// qSa(:focus) reports false when true (Chrome 21)
8191	// We allow this because of a bug in IE8/9 that throws an error
8192	// whenever `document.activeElement` is accessed on an iframe
8193	// So, we allow :focus to pass through QSA all the time to avoid the IE error
8194	// See https://bugs.jquery.com/ticket/13378
8195	rbuggyQSA = [];
8196
8197	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
8198
8199		// Build QSA regex
8200		// Regex strategy adopted from Diego Perini
8201		assert( function( el ) {
8202
8203			var input;
8204
8205			// Select is set to empty string on purpose
8206			// This is to test IE's treatment of not explicitly
8207			// setting a boolean content attribute,
8208			// since its presence should be enough
8209			// https://bugs.jquery.com/ticket/12359
8210			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
8211				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
8212				"<option selected=''></option></select>";
8213
8214			// Support: IE8, Opera 11-12.16
8215			// Nothing should be selected when empty strings follow ^= or $= or *=
8216			// The test attribute must be unknown in Opera but "safe" for WinRT
8217			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
8218			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
8219				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
8220			}
8221
8222			// Support: IE8
8223			// Boolean attributes and "value" are not treated correctly
8224			if ( !el.querySelectorAll( "[selected]" ).length ) {
8225				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
8226			}
8227
8228			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
8229			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
8230				rbuggyQSA.push( "~=" );
8231			}
8232
8233			// Support: IE 11+, Edge 15 - 18+
8234			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
8235			// Adding a temporary attribute to the document before the selection works
8236			// around the issue.
8237			// Interestingly, IE 10 & older don't seem to have the issue.
8238			input = document.createElement( "input" );
8239			input.setAttribute( "name", "" );
8240			el.appendChild( input );
8241			if ( !el.querySelectorAll( "[name='']" ).length ) {
8242				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
8243					whitespace + "*(?:''|\"\")" );
8244			}
8245
8246			// Webkit/Opera - :checked should return selected option elements
8247			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
8248			// IE8 throws error here and will not see later tests
8249			if ( !el.querySelectorAll( ":checked" ).length ) {
8250				rbuggyQSA.push( ":checked" );
8251			}
8252
8253			// Support: Safari 8+, iOS 8+
8254			// https://bugs.webkit.org/show_bug.cgi?id=136851
8255			// In-page `selector#id sibling-combinator selector` fails
8256			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
8257				rbuggyQSA.push( ".#.+[+~]" );
8258			}
8259
8260			// Support: Firefox <=3.6 - 5 only
8261			// Old Firefox doesn't throw on a badly-escaped identifier.
8262			el.querySelectorAll( "\\\f" );
8263			rbuggyQSA.push( "[\\r\\n\\f]" );
8264		} );
8265
8266		assert( function( el ) {
8267			el.innerHTML = "<a href='' disabled='disabled'></a>" +
8268				"<select disabled='disabled'><option/></select>";
8269
8270			// Support: Windows 8 Native Apps
8271			// The type and name attributes are restricted during .innerHTML assignment
8272			var input = document.createElement( "input" );
8273			input.setAttribute( "type", "hidden" );
8274			el.appendChild( input ).setAttribute( "name", "D" );
8275
8276			// Support: IE8
8277			// Enforce case-sensitivity of name attribute
8278			if ( el.querySelectorAll( "[name=d]" ).length ) {
8279				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
8280			}
8281
8282			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
8283			// IE8 throws error here and will not see later tests
8284			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
8285				rbuggyQSA.push( ":enabled", ":disabled" );
8286			}
8287
8288			// Support: IE9-11+
8289			// IE's :disabled selector does not pick up the children of disabled fieldsets
8290			docElem.appendChild( el ).disabled = true;
8291			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
8292				rbuggyQSA.push( ":enabled", ":disabled" );
8293			}
8294
8295			// Support: Opera 10 - 11 only
8296			// Opera 10-11 does not throw on post-comma invalid pseudos
8297			el.querySelectorAll( "*,:x" );
8298			rbuggyQSA.push( ",.*:" );
8299		} );
8300	}
8301
8302	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
8303		docElem.webkitMatchesSelector ||
8304		docElem.mozMatchesSelector ||
8305		docElem.oMatchesSelector ||
8306		docElem.msMatchesSelector ) ) ) ) {
8307
8308		assert( function( el ) {
8309
8310			// Check to see if it's possible to do matchesSelector
8311			// on a disconnected node (IE 9)
8312			support.disconnectedMatch = matches.call( el, "*" );
8313
8314			// This should fail with an exception
8315			// Gecko does not error, returns false instead
8316			matches.call( el, "[s!='']:x" );
8317			rbuggyMatches.push( "!=", pseudos );
8318		} );
8319	}
8320
8321	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
8322	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
8323
8324	/* Contains
8325	---------------------------------------------------------------------- */
8326	hasCompare = rnative.test( docElem.compareDocumentPosition );
8327
8328	// Element contains another
8329	// Purposefully self-exclusive
8330	// As in, an element does not contain itself
8331	contains = hasCompare || rnative.test( docElem.contains ) ?
8332		function( a, b ) {
8333			var adown = a.nodeType === 9 ? a.documentElement : a,
8334				bup = b && b.parentNode;
8335			return a === bup || !!( bup && bup.nodeType === 1 && (
8336				adown.contains ?
8337					adown.contains( bup ) :
8338					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
8339			) );
8340		} :
8341		function( a, b ) {
8342			if ( b ) {
8343				while ( ( b = b.parentNode ) ) {
8344					if ( b === a ) {
8345						return true;
8346					}
8347				}
8348			}
8349			return false;
8350		};
8351
8352	/* Sorting
8353	---------------------------------------------------------------------- */
8354
8355	// Document order sorting
8356	sortOrder = hasCompare ?
8357	function( a, b ) {
8358
8359		// Flag for duplicate removal
8360		if ( a === b ) {
8361			hasDuplicate = true;
8362			return 0;
8363		}
8364
8365		// Sort on method existence if only one input has compareDocumentPosition
8366		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
8367		if ( compare ) {
8368			return compare;
8369		}
8370
8371		// Calculate position if both inputs belong to the same document
8372		// Support: IE 11+, Edge 17 - 18+
8373		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8374		// two documents; shallow comparisons work.
8375		// eslint-disable-next-line eqeqeq
8376		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
8377			a.compareDocumentPosition( b ) :
8378
8379			// Otherwise we know they are disconnected
8380			1;
8381
8382		// Disconnected nodes
8383		if ( compare & 1 ||
8384			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
8385
8386			// Choose the first element that is related to our preferred document
8387			// Support: IE 11+, Edge 17 - 18+
8388			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8389			// two documents; shallow comparisons work.
8390			// eslint-disable-next-line eqeqeq
8391			if ( a == document || a.ownerDocument == preferredDoc &&
8392				contains( preferredDoc, a ) ) {
8393				return -1;
8394			}
8395
8396			// Support: IE 11+, Edge 17 - 18+
8397			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8398			// two documents; shallow comparisons work.
8399			// eslint-disable-next-line eqeqeq
8400			if ( b == document || b.ownerDocument == preferredDoc &&
8401				contains( preferredDoc, b ) ) {
8402				return 1;
8403			}
8404
8405			// Maintain original order
8406			return sortInput ?
8407				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
8408				0;
8409		}
8410
8411		return compare & 4 ? -1 : 1;
8412	} :
8413	function( a, b ) {
8414
8415		// Exit early if the nodes are identical
8416		if ( a === b ) {
8417			hasDuplicate = true;
8418			return 0;
8419		}
8420
8421		var cur,
8422			i = 0,
8423			aup = a.parentNode,
8424			bup = b.parentNode,
8425			ap = [ a ],
8426			bp = [ b ];
8427
8428		// Parentless nodes are either documents or disconnected
8429		if ( !aup || !bup ) {
8430
8431			// Support: IE 11+, Edge 17 - 18+
8432			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8433			// two documents; shallow comparisons work.
8434			/* eslint-disable eqeqeq */
8435			return a == document ? -1 :
8436				b == document ? 1 :
8437				/* eslint-enable eqeqeq */
8438				aup ? -1 :
8439				bup ? 1 :
8440				sortInput ?
8441				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
8442				0;
8443
8444		// If the nodes are siblings, we can do a quick check
8445		} else if ( aup === bup ) {
8446			return siblingCheck( a, b );
8447		}
8448
8449		// Otherwise we need full lists of their ancestors for comparison
8450		cur = a;
8451		while ( ( cur = cur.parentNode ) ) {
8452			ap.unshift( cur );
8453		}
8454		cur = b;
8455		while ( ( cur = cur.parentNode ) ) {
8456			bp.unshift( cur );
8457		}
8458
8459		// Walk down the tree looking for a discrepancy
8460		while ( ap[ i ] === bp[ i ] ) {
8461			i++;
8462		}
8463
8464		return i ?
8465
8466			// Do a sibling check if the nodes have a common ancestor
8467			siblingCheck( ap[ i ], bp[ i ] ) :
8468
8469			// Otherwise nodes in our document sort first
8470			// Support: IE 11+, Edge 17 - 18+
8471			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8472			// two documents; shallow comparisons work.
8473			/* eslint-disable eqeqeq */
8474			ap[ i ] == preferredDoc ? -1 :
8475			bp[ i ] == preferredDoc ? 1 :
8476			/* eslint-enable eqeqeq */
8477			0;
8478	};
8479
8480	return document;
8481};
8482
8483Sizzle.matches = function( expr, elements ) {
8484	return Sizzle( expr, null, null, elements );
8485};
8486
8487Sizzle.matchesSelector = function( elem, expr ) {
8488	setDocument( elem );
8489
8490	if ( support.matchesSelector && documentIsHTML &&
8491		!nonnativeSelectorCache[ expr + " " ] &&
8492		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
8493		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
8494
8495		try {
8496			var ret = matches.call( elem, expr );
8497
8498			// IE 9's matchesSelector returns false on disconnected nodes
8499			if ( ret || support.disconnectedMatch ||
8500
8501				// As well, disconnected nodes are said to be in a document
8502				// fragment in IE 9
8503				elem.document && elem.document.nodeType !== 11 ) {
8504				return ret;
8505			}
8506		} catch ( e ) {
8507			nonnativeSelectorCache( expr, true );
8508		}
8509	}
8510
8511	return Sizzle( expr, document, null, [ elem ] ).length > 0;
8512};
8513
8514Sizzle.contains = function( context, elem ) {
8515
8516	// Set document vars if needed
8517	// Support: IE 11+, Edge 17 - 18+
8518	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8519	// two documents; shallow comparisons work.
8520	// eslint-disable-next-line eqeqeq
8521	if ( ( context.ownerDocument || context ) != document ) {
8522		setDocument( context );
8523	}
8524	return contains( context, elem );
8525};
8526
8527Sizzle.attr = function( elem, name ) {
8528
8529	// Set document vars if needed
8530	// Support: IE 11+, Edge 17 - 18+
8531	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8532	// two documents; shallow comparisons work.
8533	// eslint-disable-next-line eqeqeq
8534	if ( ( elem.ownerDocument || elem ) != document ) {
8535		setDocument( elem );
8536	}
8537
8538	var fn = Expr.attrHandle[ name.toLowerCase() ],
8539
8540		// Don't get fooled by Object.prototype properties (jQuery #13807)
8541		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
8542			fn( elem, name, !documentIsHTML ) :
8543			undefined;
8544
8545	return val !== undefined ?
8546		val :
8547		support.attributes || !documentIsHTML ?
8548			elem.getAttribute( name ) :
8549			( val = elem.getAttributeNode( name ) ) && val.specified ?
8550				val.value :
8551				null;
8552};
8553
8554Sizzle.escape = function( sel ) {
8555	return ( sel + "" ).replace( rcssescape, fcssescape );
8556};
8557
8558Sizzle.error = function( msg ) {
8559	throw new Error( "Syntax error, unrecognized expression: " + msg );
8560};
8561
8562/**
8563 * Document sorting and removing duplicates
8564 * @param {ArrayLike} results
8565 */
8566Sizzle.uniqueSort = function( results ) {
8567	var elem,
8568		duplicates = [],
8569		j = 0,
8570		i = 0;
8571
8572	// Unless we *know* we can detect duplicates, assume their presence
8573	hasDuplicate = !support.detectDuplicates;
8574	sortInput = !support.sortStable && results.slice( 0 );
8575	results.sort( sortOrder );
8576
8577	if ( hasDuplicate ) {
8578		while ( ( elem = results[ i++ ] ) ) {
8579			if ( elem === results[ i ] ) {
8580				j = duplicates.push( i );
8581			}
8582		}
8583		while ( j-- ) {
8584			results.splice( duplicates[ j ], 1 );
8585		}
8586	}
8587
8588	// Clear input after sorting to release objects
8589	// See https://github.com/jquery/sizzle/pull/225
8590	sortInput = null;
8591
8592	return results;
8593};
8594
8595/**
8596 * Utility function for retrieving the text value of an array of DOM nodes
8597 * @param {Array|Element} elem
8598 */
8599getText = Sizzle.getText = function( elem ) {
8600	var node,
8601		ret = "",
8602		i = 0,
8603		nodeType = elem.nodeType;
8604
8605	if ( !nodeType ) {
8606
8607		// If no nodeType, this is expected to be an array
8608		while ( ( node = elem[ i++ ] ) ) {
8609
8610			// Do not traverse comment nodes
8611			ret += getText( node );
8612		}
8613	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
8614
8615		// Use textContent for elements
8616		// innerText usage removed for consistency of new lines (jQuery #11153)
8617		if ( typeof elem.textContent === "string" ) {
8618			return elem.textContent;
8619		} else {
8620
8621			// Traverse its children
8622			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
8623				ret += getText( elem );
8624			}
8625		}
8626	} else if ( nodeType === 3 || nodeType === 4 ) {
8627		return elem.nodeValue;
8628	}
8629
8630	// Do not include comment or processing instruction nodes
8631
8632	return ret;
8633};
8634
8635Expr = Sizzle.selectors = {
8636
8637	// Can be adjusted by the user
8638	cacheLength: 50,
8639
8640	createPseudo: markFunction,
8641
8642	match: matchExpr,
8643
8644	attrHandle: {},
8645
8646	find: {},
8647
8648	relative: {
8649		">": { dir: "parentNode", first: true },
8650		" ": { dir: "parentNode" },
8651		"+": { dir: "previousSibling", first: true },
8652		"~": { dir: "previousSibling" }
8653	},
8654
8655	preFilter: {
8656		"ATTR": function( match ) {
8657			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
8658
8659			// Move the given value to match[3] whether quoted or unquoted
8660			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
8661				match[ 5 ] || "" ).replace( runescape, funescape );
8662
8663			if ( match[ 2 ] === "~=" ) {
8664				match[ 3 ] = " " + match[ 3 ] + " ";
8665			}
8666
8667			return match.slice( 0, 4 );
8668		},
8669
8670		"CHILD": function( match ) {
8671
8672			/* matches from matchExpr["CHILD"]
8673				1 type (only|nth|...)
8674				2 what (child|of-type)
8675				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
8676				4 xn-component of xn+y argument ([+-]?\d*n|)
8677				5 sign of xn-component
8678				6 x of xn-component
8679				7 sign of y-component
8680				8 y of y-component
8681			*/
8682			match[ 1 ] = match[ 1 ].toLowerCase();
8683
8684			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
8685
8686				// nth-* requires argument
8687				if ( !match[ 3 ] ) {
8688					Sizzle.error( match[ 0 ] );
8689				}
8690
8691				// numeric x and y parameters for Expr.filter.CHILD
8692				// remember that false/true cast respectively to 0/1
8693				match[ 4 ] = +( match[ 4 ] ?
8694					match[ 5 ] + ( match[ 6 ] || 1 ) :
8695					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
8696				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
8697
8698				// other types prohibit arguments
8699			} else if ( match[ 3 ] ) {
8700				Sizzle.error( match[ 0 ] );
8701			}
8702
8703			return match;
8704		},
8705
8706		"PSEUDO": function( match ) {
8707			var excess,
8708				unquoted = !match[ 6 ] && match[ 2 ];
8709
8710			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
8711				return null;
8712			}
8713
8714			// Accept quoted arguments as-is
8715			if ( match[ 3 ] ) {
8716				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
8717
8718			// Strip excess characters from unquoted arguments
8719			} else if ( unquoted && rpseudo.test( unquoted ) &&
8720
8721				// Get excess from tokenize (recursively)
8722				( excess = tokenize( unquoted, true ) ) &&
8723
8724				// advance to the next closing parenthesis
8725				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
8726
8727				// excess is a negative index
8728				match[ 0 ] = match[ 0 ].slice( 0, excess );
8729				match[ 2 ] = unquoted.slice( 0, excess );
8730			}
8731
8732			// Return only captures needed by the pseudo filter method (type and argument)
8733			return match.slice( 0, 3 );
8734		}
8735	},
8736
8737	filter: {
8738
8739		"TAG": function( nodeNameSelector ) {
8740			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
8741			return nodeNameSelector === "*" ?
8742				function() {
8743					return true;
8744				} :
8745				function( elem ) {
8746					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
8747				};
8748		},
8749
8750		"CLASS": function( className ) {
8751			var pattern = classCache[ className + " " ];
8752
8753			return pattern ||
8754				( pattern = new RegExp( "(^|" + whitespace +
8755					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
8756						className, function( elem ) {
8757							return pattern.test(
8758								typeof elem.className === "string" && elem.className ||
8759								typeof elem.getAttribute !== "undefined" &&
8760									elem.getAttribute( "class" ) ||
8761								""
8762							);
8763				} );
8764		},
8765
8766		"ATTR": function( name, operator, check ) {
8767			return function( elem ) {
8768				var result = Sizzle.attr( elem, name );
8769
8770				if ( result == null ) {
8771					return operator === "!=";
8772				}
8773				if ( !operator ) {
8774					return true;
8775				}
8776
8777				result += "";
8778
8779				/* eslint-disable max-len */
8780
8781				return operator === "=" ? result === check :
8782					operator === "!=" ? result !== check :
8783					operator === "^=" ? check && result.indexOf( check ) === 0 :
8784					operator === "*=" ? check && result.indexOf( check ) > -1 :
8785					operator === "$=" ? check && result.slice( -check.length ) === check :
8786					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
8787					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
8788					false;
8789				/* eslint-enable max-len */
8790
8791			};
8792		},
8793
8794		"CHILD": function( type, what, _argument, first, last ) {
8795			var simple = type.slice( 0, 3 ) !== "nth",
8796				forward = type.slice( -4 ) !== "last",
8797				ofType = what === "of-type";
8798
8799			return first === 1 && last === 0 ?
8800
8801				// Shortcut for :nth-*(n)
8802				function( elem ) {
8803					return !!elem.parentNode;
8804				} :
8805
8806				function( elem, _context, xml ) {
8807					var cache, uniqueCache, outerCache, node, nodeIndex, start,
8808						dir = simple !== forward ? "nextSibling" : "previousSibling",
8809						parent = elem.parentNode,
8810						name = ofType && elem.nodeName.toLowerCase(),
8811						useCache = !xml && !ofType,
8812						diff = false;
8813
8814					if ( parent ) {
8815
8816						// :(first|last|only)-(child|of-type)
8817						if ( simple ) {
8818							while ( dir ) {
8819								node = elem;
8820								while ( ( node = node[ dir ] ) ) {
8821									if ( ofType ?
8822										node.nodeName.toLowerCase() === name :
8823										node.nodeType === 1 ) {
8824
8825										return false;
8826									}
8827								}
8828
8829								// Reverse direction for :only-* (if we haven't yet done so)
8830								start = dir = type === "only" && !start && "nextSibling";
8831							}
8832							return true;
8833						}
8834
8835						start = [ forward ? parent.firstChild : parent.lastChild ];
8836
8837						// non-xml :nth-child(...) stores cache data on `parent`
8838						if ( forward && useCache ) {
8839
8840							// Seek `elem` from a previously-cached index
8841
8842							// ...in a gzip-friendly way
8843							node = parent;
8844							outerCache = node[ expando ] || ( node[ expando ] = {} );
8845
8846							// Support: IE <9 only
8847							// Defend against cloned attroperties (jQuery gh-1709)
8848							uniqueCache = outerCache[ node.uniqueID ] ||
8849								( outerCache[ node.uniqueID ] = {} );
8850
8851							cache = uniqueCache[ type ] || [];
8852							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
8853							diff = nodeIndex && cache[ 2 ];
8854							node = nodeIndex && parent.childNodes[ nodeIndex ];
8855
8856							while ( ( node = ++nodeIndex && node && node[ dir ] ||
8857
8858								// Fallback to seeking `elem` from the start
8859								( diff = nodeIndex = 0 ) || start.pop() ) ) {
8860
8861								// When found, cache indexes on `parent` and break
8862								if ( node.nodeType === 1 && ++diff && node === elem ) {
8863									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
8864									break;
8865								}
8866							}
8867
8868						} else {
8869
8870							// Use previously-cached element index if available
8871							if ( useCache ) {
8872
8873								// ...in a gzip-friendly way
8874								node = elem;
8875								outerCache = node[ expando ] || ( node[ expando ] = {} );
8876
8877								// Support: IE <9 only
8878								// Defend against cloned attroperties (jQuery gh-1709)
8879								uniqueCache = outerCache[ node.uniqueID ] ||
8880									( outerCache[ node.uniqueID ] = {} );
8881
8882								cache = uniqueCache[ type ] || [];
8883								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
8884								diff = nodeIndex;
8885							}
8886
8887							// xml :nth-child(...)
8888							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
8889							if ( diff === false ) {
8890
8891								// Use the same loop as above to seek `elem` from the start
8892								while ( ( node = ++nodeIndex && node && node[ dir ] ||
8893									( diff = nodeIndex = 0 ) || start.pop() ) ) {
8894
8895									if ( ( ofType ?
8896										node.nodeName.toLowerCase() === name :
8897										node.nodeType === 1 ) &&
8898										++diff ) {
8899
8900										// Cache the index of each encountered element
8901										if ( useCache ) {
8902											outerCache = node[ expando ] ||
8903												( node[ expando ] = {} );
8904
8905											// Support: IE <9 only
8906											// Defend against cloned attroperties (jQuery gh-1709)
8907											uniqueCache = outerCache[ node.uniqueID ] ||
8908												( outerCache[ node.uniqueID ] = {} );
8909
8910											uniqueCache[ type ] = [ dirruns, diff ];
8911										}
8912
8913										if ( node === elem ) {
8914											break;
8915										}
8916									}
8917								}
8918							}
8919						}
8920
8921						// Incorporate the offset, then check against cycle size
8922						diff -= last;
8923						return diff === first || ( diff % first === 0 && diff / first >= 0 );
8924					}
8925				};
8926		},
8927
8928		"PSEUDO": function( pseudo, argument ) {
8929
8930			// pseudo-class names are case-insensitive
8931			// http://www.w3.org/TR/selectors/#pseudo-classes
8932			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
8933			// Remember that setFilters inherits from pseudos
8934			var args,
8935				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
8936					Sizzle.error( "unsupported pseudo: " + pseudo );
8937
8938			// The user may use createPseudo to indicate that
8939			// arguments are needed to create the filter function
8940			// just as Sizzle does
8941			if ( fn[ expando ] ) {
8942				return fn( argument );
8943			}
8944
8945			// But maintain support for old signatures
8946			if ( fn.length > 1 ) {
8947				args = [ pseudo, pseudo, "", argument ];
8948				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
8949					markFunction( function( seed, matches ) {
8950						var idx,
8951							matched = fn( seed, argument ),
8952							i = matched.length;
8953						while ( i-- ) {
8954							idx = indexOf( seed, matched[ i ] );
8955							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
8956						}
8957					} ) :
8958					function( elem ) {
8959						return fn( elem, 0, args );
8960					};
8961			}
8962
8963			return fn;
8964		}
8965	},
8966
8967	pseudos: {
8968
8969		// Potentially complex pseudos
8970		"not": markFunction( function( selector ) {
8971
8972			// Trim the selector passed to compile
8973			// to avoid treating leading and trailing
8974			// spaces as combinators
8975			var input = [],
8976				results = [],
8977				matcher = compile( selector.replace( rtrim, "$1" ) );
8978
8979			return matcher[ expando ] ?
8980				markFunction( function( seed, matches, _context, xml ) {
8981					var elem,
8982						unmatched = matcher( seed, null, xml, [] ),
8983						i = seed.length;
8984
8985					// Match elements unmatched by `matcher`
8986					while ( i-- ) {
8987						if ( ( elem = unmatched[ i ] ) ) {
8988							seed[ i ] = !( matches[ i ] = elem );
8989						}
8990					}
8991				} ) :
8992				function( elem, _context, xml ) {
8993					input[ 0 ] = elem;
8994					matcher( input, null, xml, results );
8995
8996					// Don't keep the element (issue #299)
8997					input[ 0 ] = null;
8998					return !results.pop();
8999				};
9000		} ),
9001
9002		"has": markFunction( function( selector ) {
9003			return function( elem ) {
9004				return Sizzle( selector, elem ).length > 0;
9005			};
9006		} ),
9007
9008		"contains": markFunction( function( text ) {
9009			text = text.replace( runescape, funescape );
9010			return function( elem ) {
9011				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
9012			};
9013		} ),
9014
9015		// "Whether an element is represented by a :lang() selector
9016		// is based solely on the element's language value
9017		// being equal to the identifier C,
9018		// or beginning with the identifier C immediately followed by "-".
9019		// The matching of C against the element's language value is performed case-insensitively.
9020		// The identifier C does not have to be a valid language name."
9021		// http://www.w3.org/TR/selectors/#lang-pseudo
9022		"lang": markFunction( function( lang ) {
9023
9024			// lang value must be a valid identifier
9025			if ( !ridentifier.test( lang || "" ) ) {
9026				Sizzle.error( "unsupported lang: " + lang );
9027			}
9028			lang = lang.replace( runescape, funescape ).toLowerCase();
9029			return function( elem ) {
9030				var elemLang;
9031				do {
9032					if ( ( elemLang = documentIsHTML ?
9033						elem.lang :
9034						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
9035
9036						elemLang = elemLang.toLowerCase();
9037						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
9038					}
9039				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
9040				return false;
9041			};
9042		} ),
9043
9044		// Miscellaneous
9045		"target": function( elem ) {
9046			var hash = window.location && window.location.hash;
9047			return hash && hash.slice( 1 ) === elem.id;
9048		},
9049
9050		"root": function( elem ) {
9051			return elem === docElem;
9052		},
9053
9054		"focus": function( elem ) {
9055			return elem === document.activeElement &&
9056				( !document.hasFocus || document.hasFocus() ) &&
9057				!!( elem.type || elem.href || ~elem.tabIndex );
9058		},
9059
9060		// Boolean properties
9061		"enabled": createDisabledPseudo( false ),
9062		"disabled": createDisabledPseudo( true ),
9063
9064		"checked": function( elem ) {
9065
9066			// In CSS3, :checked should return both checked and selected elements
9067			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
9068			var nodeName = elem.nodeName.toLowerCase();
9069			return ( nodeName === "input" && !!elem.checked ) ||
9070				( nodeName === "option" && !!elem.selected );
9071		},
9072
9073		"selected": function( elem ) {
9074
9075			// Accessing this property makes selected-by-default
9076			// options in Safari work properly
9077			if ( elem.parentNode ) {
9078				// eslint-disable-next-line no-unused-expressions
9079				elem.parentNode.selectedIndex;
9080			}
9081
9082			return elem.selected === true;
9083		},
9084
9085		// Contents
9086		"empty": function( elem ) {
9087
9088			// http://www.w3.org/TR/selectors/#empty-pseudo
9089			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
9090			//   but not by others (comment: 8; processing instruction: 7; etc.)
9091			// nodeType < 6 works because attributes (2) do not appear as children
9092			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
9093				if ( elem.nodeType < 6 ) {
9094					return false;
9095				}
9096			}
9097			return true;
9098		},
9099
9100		"parent": function( elem ) {
9101			return !Expr.pseudos[ "empty" ]( elem );
9102		},
9103
9104		// Element/input types
9105		"header": function( elem ) {
9106			return rheader.test( elem.nodeName );
9107		},
9108
9109		"input": function( elem ) {
9110			return rinputs.test( elem.nodeName );
9111		},
9112
9113		"button": function( elem ) {
9114			var name = elem.nodeName.toLowerCase();
9115			return name === "input" && elem.type === "button" || name === "button";
9116		},
9117
9118		"text": function( elem ) {
9119			var attr;
9120			return elem.nodeName.toLowerCase() === "input" &&
9121				elem.type === "text" &&
9122
9123				// Support: IE<8
9124				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
9125				( ( attr = elem.getAttribute( "type" ) ) == null ||
9126					attr.toLowerCase() === "text" );
9127		},
9128
9129		// Position-in-collection
9130		"first": createPositionalPseudo( function() {
9131			return [ 0 ];
9132		} ),
9133
9134		"last": createPositionalPseudo( function( _matchIndexes, length ) {
9135			return [ length - 1 ];
9136		} ),
9137
9138		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
9139			return [ argument < 0 ? argument + length : argument ];
9140		} ),
9141
9142		"even": createPositionalPseudo( function( matchIndexes, length ) {
9143			var i = 0;
9144			for ( ; i < length; i += 2 ) {
9145				matchIndexes.push( i );
9146			}
9147			return matchIndexes;
9148		} ),
9149
9150		"odd": createPositionalPseudo( function( matchIndexes, length ) {
9151			var i = 1;
9152			for ( ; i < length; i += 2 ) {
9153				matchIndexes.push( i );
9154			}
9155			return matchIndexes;
9156		} ),
9157
9158		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
9159			var i = argument < 0 ?
9160				argument + length :
9161				argument > length ?
9162					length :
9163					argument;
9164			for ( ; --i >= 0; ) {
9165				matchIndexes.push( i );
9166			}
9167			return matchIndexes;
9168		} ),
9169
9170		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
9171			var i = argument < 0 ? argument + length : argument;
9172			for ( ; ++i < length; ) {
9173				matchIndexes.push( i );
9174			}
9175			return matchIndexes;
9176		} )
9177	}
9178};
9179
9180Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
9181
9182// Add button/input type pseudos
9183for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
9184	Expr.pseudos[ i ] = createInputPseudo( i );
9185}
9186for ( i in { submit: true, reset: true } ) {
9187	Expr.pseudos[ i ] = createButtonPseudo( i );
9188}
9189
9190// Easy API for creating new setFilters
9191function setFilters() {}
9192setFilters.prototype = Expr.filters = Expr.pseudos;
9193Expr.setFilters = new setFilters();
9194
9195tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
9196	var matched, match, tokens, type,
9197		soFar, groups, preFilters,
9198		cached = tokenCache[ selector + " " ];
9199
9200	if ( cached ) {
9201		return parseOnly ? 0 : cached.slice( 0 );
9202	}
9203
9204	soFar = selector;
9205	groups = [];
9206	preFilters = Expr.preFilter;
9207
9208	while ( soFar ) {
9209
9210		// Comma and first run
9211		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
9212			if ( match ) {
9213
9214				// Don't consume trailing commas as valid
9215				soFar = soFar.slice( match[ 0 ].length ) || soFar;
9216			}
9217			groups.push( ( tokens = [] ) );
9218		}
9219
9220		matched = false;
9221
9222		// Combinators
9223		if ( ( match = rcombinators.exec( soFar ) ) ) {
9224			matched = match.shift();
9225			tokens.push( {
9226				value: matched,
9227
9228				// Cast descendant combinators to space
9229				type: match[ 0 ].replace( rtrim, " " )
9230			} );
9231			soFar = soFar.slice( matched.length );
9232		}
9233
9234		// Filters
9235		for ( type in Expr.filter ) {
9236			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
9237				( match = preFilters[ type ]( match ) ) ) ) {
9238				matched = match.shift();
9239				tokens.push( {
9240					value: matched,
9241					type: type,
9242					matches: match
9243				} );
9244				soFar = soFar.slice( matched.length );
9245			}
9246		}
9247
9248		if ( !matched ) {
9249			break;
9250		}
9251	}
9252
9253	// Return the length of the invalid excess
9254	// if we're just parsing
9255	// Otherwise, throw an error or return tokens
9256	return parseOnly ?
9257		soFar.length :
9258		soFar ?
9259			Sizzle.error( selector ) :
9260
9261			// Cache the tokens
9262			tokenCache( selector, groups ).slice( 0 );
9263};
9264
9265function toSelector( tokens ) {
9266	var i = 0,
9267		len = tokens.length,
9268		selector = "";
9269	for ( ; i < len; i++ ) {
9270		selector += tokens[ i ].value;
9271	}
9272	return selector;
9273}
9274
9275function addCombinator( matcher, combinator, base ) {
9276	var dir = combinator.dir,
9277		skip = combinator.next,
9278		key = skip || dir,
9279		checkNonElements = base && key === "parentNode",
9280		doneName = done++;
9281
9282	return combinator.first ?
9283
9284		// Check against closest ancestor/preceding element
9285		function( elem, context, xml ) {
9286			while ( ( elem = elem[ dir ] ) ) {
9287				if ( elem.nodeType === 1 || checkNonElements ) {
9288					return matcher( elem, context, xml );
9289				}
9290			}
9291			return false;
9292		} :
9293
9294		// Check against all ancestor/preceding elements
9295		function( elem, context, xml ) {
9296			var oldCache, uniqueCache, outerCache,
9297				newCache = [ dirruns, doneName ];
9298
9299			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
9300			if ( xml ) {
9301				while ( ( elem = elem[ dir ] ) ) {
9302					if ( elem.nodeType === 1 || checkNonElements ) {
9303						if ( matcher( elem, context, xml ) ) {
9304							return true;
9305						}
9306					}
9307				}
9308			} else {
9309				while ( ( elem = elem[ dir ] ) ) {
9310					if ( elem.nodeType === 1 || checkNonElements ) {
9311						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
9312
9313						// Support: IE <9 only
9314						// Defend against cloned attroperties (jQuery gh-1709)
9315						uniqueCache = outerCache[ elem.uniqueID ] ||
9316							( outerCache[ elem.uniqueID ] = {} );
9317
9318						if ( skip && skip === elem.nodeName.toLowerCase() ) {
9319							elem = elem[ dir ] || elem;
9320						} else if ( ( oldCache = uniqueCache[ key ] ) &&
9321							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
9322
9323							// Assign to newCache so results back-propagate to previous elements
9324							return ( newCache[ 2 ] = oldCache[ 2 ] );
9325						} else {
9326
9327							// Reuse newcache so results back-propagate to previous elements
9328							uniqueCache[ key ] = newCache;
9329
9330							// A match means we're done; a fail means we have to keep checking
9331							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
9332								return true;
9333							}
9334						}
9335					}
9336				}
9337			}
9338			return false;
9339		};
9340}
9341
9342function elementMatcher( matchers ) {
9343	return matchers.length > 1 ?
9344		function( elem, context, xml ) {
9345			var i = matchers.length;
9346			while ( i-- ) {
9347				if ( !matchers[ i ]( elem, context, xml ) ) {
9348					return false;
9349				}
9350			}
9351			return true;
9352		} :
9353		matchers[ 0 ];
9354}
9355
9356function multipleContexts( selector, contexts, results ) {
9357	var i = 0,
9358		len = contexts.length;
9359	for ( ; i < len; i++ ) {
9360		Sizzle( selector, contexts[ i ], results );
9361	}
9362	return results;
9363}
9364
9365function condense( unmatched, map, filter, context, xml ) {
9366	var elem,
9367		newUnmatched = [],
9368		i = 0,
9369		len = unmatched.length,
9370		mapped = map != null;
9371
9372	for ( ; i < len; i++ ) {
9373		if ( ( elem = unmatched[ i ] ) ) {
9374			if ( !filter || filter( elem, context, xml ) ) {
9375				newUnmatched.push( elem );
9376				if ( mapped ) {
9377					map.push( i );
9378				}
9379			}
9380		}
9381	}
9382
9383	return newUnmatched;
9384}
9385
9386function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
9387	if ( postFilter && !postFilter[ expando ] ) {
9388		postFilter = setMatcher( postFilter );
9389	}
9390	if ( postFinder && !postFinder[ expando ] ) {
9391		postFinder = setMatcher( postFinder, postSelector );
9392	}
9393	return markFunction( function( seed, results, context, xml ) {
9394		var temp, i, elem,
9395			preMap = [],
9396			postMap = [],
9397			preexisting = results.length,
9398
9399			// Get initial elements from seed or context
9400			elems = seed || multipleContexts(
9401				selector || "*",
9402				context.nodeType ? [ context ] : context,
9403				[]
9404			),
9405
9406			// Prefilter to get matcher input, preserving a map for seed-results synchronization
9407			matcherIn = preFilter && ( seed || !selector ) ?
9408				condense( elems, preMap, preFilter, context, xml ) :
9409				elems,
9410
9411			matcherOut = matcher ?
9412
9413				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
9414				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
9415
9416					// ...intermediate processing is necessary
9417					[] :
9418
9419					// ...otherwise use results directly
9420					results :
9421				matcherIn;
9422
9423		// Find primary matches
9424		if ( matcher ) {
9425			matcher( matcherIn, matcherOut, context, xml );
9426		}
9427
9428		// Apply postFilter
9429		if ( postFilter ) {
9430			temp = condense( matcherOut, postMap );
9431			postFilter( temp, [], context, xml );
9432
9433			// Un-match failing elements by moving them back to matcherIn
9434			i = temp.length;
9435			while ( i-- ) {
9436				if ( ( elem = temp[ i ] ) ) {
9437					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
9438				}
9439			}
9440		}
9441
9442		if ( seed ) {
9443			if ( postFinder || preFilter ) {
9444				if ( postFinder ) {
9445
9446					// Get the final matcherOut by condensing this intermediate into postFinder contexts
9447					temp = [];
9448					i = matcherOut.length;
9449					while ( i-- ) {
9450						if ( ( elem = matcherOut[ i ] ) ) {
9451
9452							// Restore matcherIn since elem is not yet a final match
9453							temp.push( ( matcherIn[ i ] = elem ) );
9454						}
9455					}
9456					postFinder( null, ( matcherOut = [] ), temp, xml );
9457				}
9458
9459				// Move matched elements from seed to results to keep them synchronized
9460				i = matcherOut.length;
9461				while ( i-- ) {
9462					if ( ( elem = matcherOut[ i ] ) &&
9463						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
9464
9465						seed[ temp ] = !( results[ temp ] = elem );
9466					}
9467				}
9468			}
9469
9470		// Add elements to results, through postFinder if defined
9471		} else {
9472			matcherOut = condense(
9473				matcherOut === results ?
9474					matcherOut.splice( preexisting, matcherOut.length ) :
9475					matcherOut
9476			);
9477			if ( postFinder ) {
9478				postFinder( null, results, matcherOut, xml );
9479			} else {
9480				push.apply( results, matcherOut );
9481			}
9482		}
9483	} );
9484}
9485
9486function matcherFromTokens( tokens ) {
9487	var checkContext, matcher, j,
9488		len = tokens.length,
9489		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
9490		implicitRelative = leadingRelative || Expr.relative[ " " ],
9491		i = leadingRelative ? 1 : 0,
9492
9493		// The foundational matcher ensures that elements are reachable from top-level context(s)
9494		matchContext = addCombinator( function( elem ) {
9495			return elem === checkContext;
9496		}, implicitRelative, true ),
9497		matchAnyContext = addCombinator( function( elem ) {
9498			return indexOf( checkContext, elem ) > -1;
9499		}, implicitRelative, true ),
9500		matchers = [ function( elem, context, xml ) {
9501			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
9502				( checkContext = context ).nodeType ?
9503					matchContext( elem, context, xml ) :
9504					matchAnyContext( elem, context, xml ) );
9505
9506			// Avoid hanging onto element (issue #299)
9507			checkContext = null;
9508			return ret;
9509		} ];
9510
9511	for ( ; i < len; i++ ) {
9512		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
9513			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
9514		} else {
9515			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
9516
9517			// Return special upon seeing a positional matcher
9518			if ( matcher[ expando ] ) {
9519
9520				// Find the next relative operator (if any) for proper handling
9521				j = ++i;
9522				for ( ; j < len; j++ ) {
9523					if ( Expr.relative[ tokens[ j ].type ] ) {
9524						break;
9525					}
9526				}
9527				return setMatcher(
9528					i > 1 && elementMatcher( matchers ),
9529					i > 1 && toSelector(
9530
9531					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
9532					tokens
9533						.slice( 0, i - 1 )
9534						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
9535					).replace( rtrim, "$1" ),
9536					matcher,
9537					i < j && matcherFromTokens( tokens.slice( i, j ) ),
9538					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
9539					j < len && toSelector( tokens )
9540				);
9541			}
9542			matchers.push( matcher );
9543		}
9544	}
9545
9546	return elementMatcher( matchers );
9547}
9548
9549function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
9550	var bySet = setMatchers.length > 0,
9551		byElement = elementMatchers.length > 0,
9552		superMatcher = function( seed, context, xml, results, outermost ) {
9553			var elem, j, matcher,
9554				matchedCount = 0,
9555				i = "0",
9556				unmatched = seed && [],
9557				setMatched = [],
9558				contextBackup = outermostContext,
9559
9560				// We must always have either seed elements or outermost context
9561				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
9562
9563				// Use integer dirruns iff this is the outermost matcher
9564				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
9565				len = elems.length;
9566
9567			if ( outermost ) {
9568
9569				// Support: IE 11+, Edge 17 - 18+
9570				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9571				// two documents; shallow comparisons work.
9572				// eslint-disable-next-line eqeqeq
9573				outermostContext = context == document || context || outermost;
9574			}
9575
9576			// Add elements passing elementMatchers directly to results
9577			// Support: IE<9, Safari
9578			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
9579			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
9580				if ( byElement && elem ) {
9581					j = 0;
9582
9583					// Support: IE 11+, Edge 17 - 18+
9584					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9585					// two documents; shallow comparisons work.
9586					// eslint-disable-next-line eqeqeq
9587					if ( !context && elem.ownerDocument != document ) {
9588						setDocument( elem );
9589						xml = !documentIsHTML;
9590					}
9591					while ( ( matcher = elementMatchers[ j++ ] ) ) {
9592						if ( matcher( elem, context || document, xml ) ) {
9593							results.push( elem );
9594							break;
9595						}
9596					}
9597					if ( outermost ) {
9598						dirruns = dirrunsUnique;
9599					}
9600				}
9601
9602				// Track unmatched elements for set filters
9603				if ( bySet ) {
9604
9605					// They will have gone through all possible matchers
9606					if ( ( elem = !matcher && elem ) ) {
9607						matchedCount--;
9608					}
9609
9610					// Lengthen the array for every element, matched or not
9611					if ( seed ) {
9612						unmatched.push( elem );
9613					}
9614				}
9615			}
9616
9617			// `i` is now the count of elements visited above, and adding it to `matchedCount`
9618			// makes the latter nonnegative.
9619			matchedCount += i;
9620
9621			// Apply set filters to unmatched elements
9622			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
9623			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
9624			// no element matchers and no seed.
9625			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
9626			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
9627			// numerically zero.
9628			if ( bySet && i !== matchedCount ) {
9629				j = 0;
9630				while ( ( matcher = setMatchers[ j++ ] ) ) {
9631					matcher( unmatched, setMatched, context, xml );
9632				}
9633
9634				if ( seed ) {
9635
9636					// Reintegrate element matches to eliminate the need for sorting
9637					if ( matchedCount > 0 ) {
9638						while ( i-- ) {
9639							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
9640								setMatched[ i ] = pop.call( results );
9641							}
9642						}
9643					}
9644
9645					// Discard index placeholder values to get only actual matches
9646					setMatched = condense( setMatched );
9647				}
9648
9649				// Add matches to results
9650				push.apply( results, setMatched );
9651
9652				// Seedless set matches succeeding multiple successful matchers stipulate sorting
9653				if ( outermost && !seed && setMatched.length > 0 &&
9654					( matchedCount + setMatchers.length ) > 1 ) {
9655
9656					Sizzle.uniqueSort( results );
9657				}
9658			}
9659
9660			// Override manipulation of globals by nested matchers
9661			if ( outermost ) {
9662				dirruns = dirrunsUnique;
9663				outermostContext = contextBackup;
9664			}
9665
9666			return unmatched;
9667		};
9668
9669	return bySet ?
9670		markFunction( superMatcher ) :
9671		superMatcher;
9672}
9673
9674compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
9675	var i,
9676		setMatchers = [],
9677		elementMatchers = [],
9678		cached = compilerCache[ selector + " " ];
9679
9680	if ( !cached ) {
9681
9682		// Generate a function of recursive functions that can be used to check each element
9683		if ( !match ) {
9684			match = tokenize( selector );
9685		}
9686		i = match.length;
9687		while ( i-- ) {
9688			cached = matcherFromTokens( match[ i ] );
9689			if ( cached[ expando ] ) {
9690				setMatchers.push( cached );
9691			} else {
9692				elementMatchers.push( cached );
9693			}
9694		}
9695
9696		// Cache the compiled function
9697		cached = compilerCache(
9698			selector,
9699			matcherFromGroupMatchers( elementMatchers, setMatchers )
9700		);
9701
9702		// Save selector and tokenization
9703		cached.selector = selector;
9704	}
9705	return cached;
9706};
9707
9708/**
9709 * A low-level selection function that works with Sizzle's compiled
9710 *  selector functions
9711 * @param {String|Function} selector A selector or a pre-compiled
9712 *  selector function built with Sizzle.compile
9713 * @param {Element} context
9714 * @param {Array} [results]
9715 * @param {Array} [seed] A set of elements to match against
9716 */
9717select = Sizzle.select = function( selector, context, results, seed ) {
9718	var i, tokens, token, type, find,
9719		compiled = typeof selector === "function" && selector,
9720		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
9721
9722	results = results || [];
9723
9724	// Try to minimize operations if there is only one selector in the list and no seed
9725	// (the latter of which guarantees us context)
9726	if ( match.length === 1 ) {
9727
9728		// Reduce context if the leading compound selector is an ID
9729		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
9730		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
9731			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
9732
9733			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
9734				.replace( runescape, funescape ), context ) || [] )[ 0 ];
9735			if ( !context ) {
9736				return results;
9737
9738			// Precompiled matchers will still verify ancestry, so step up a level
9739			} else if ( compiled ) {
9740				context = context.parentNode;
9741			}
9742
9743			selector = selector.slice( tokens.shift().value.length );
9744		}
9745
9746		// Fetch a seed set for right-to-left matching
9747		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
9748		while ( i-- ) {
9749			token = tokens[ i ];
9750
9751			// Abort if we hit a combinator
9752			if ( Expr.relative[ ( type = token.type ) ] ) {
9753				break;
9754			}
9755			if ( ( find = Expr.find[ type ] ) ) {
9756
9757				// Search, expanding context for leading sibling combinators
9758				if ( ( seed = find(
9759					token.matches[ 0 ].replace( runescape, funescape ),
9760					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
9761						context
9762				) ) ) {
9763
9764					// If seed is empty or no tokens remain, we can return early
9765					tokens.splice( i, 1 );
9766					selector = seed.length && toSelector( tokens );
9767					if ( !selector ) {
9768						push.apply( results, seed );
9769						return results;
9770					}
9771
9772					break;
9773				}
9774			}
9775		}
9776	}
9777
9778	// Compile and execute a filtering function if one is not provided
9779	// Provide `match` to avoid retokenization if we modified the selector above
9780	( compiled || compile( selector, match ) )(
9781		seed,
9782		context,
9783		!documentIsHTML,
9784		results,
9785		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
9786	);
9787	return results;
9788};
9789
9790// One-time assignments
9791
9792// Sort stability
9793support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
9794
9795// Support: Chrome 14-35+
9796// Always assume duplicates if they aren't passed to the comparison function
9797support.detectDuplicates = !!hasDuplicate;
9798
9799// Initialize against the default document
9800setDocument();
9801
9802// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
9803// Detached nodes confoundingly follow *each other*
9804support.sortDetached = assert( function( el ) {
9805
9806	// Should return 1, but returns 4 (following)
9807	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
9808} );
9809
9810// Support: IE<8
9811// Prevent attribute/property "interpolation"
9812// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
9813if ( !assert( function( el ) {
9814	el.innerHTML = "<a href='#'></a>";
9815	return el.firstChild.getAttribute( "href" ) === "#";
9816} ) ) {
9817	addHandle( "type|href|height|width", function( elem, name, isXML ) {
9818		if ( !isXML ) {
9819			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
9820		}
9821	} );
9822}
9823
9824// Support: IE<9
9825// Use defaultValue in place of getAttribute("value")
9826if ( !support.attributes || !assert( function( el ) {
9827	el.innerHTML = "<input/>";
9828	el.firstChild.setAttribute( "value", "" );
9829	return el.firstChild.getAttribute( "value" ) === "";
9830} ) ) {
9831	addHandle( "value", function( elem, _name, isXML ) {
9832		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
9833			return elem.defaultValue;
9834		}
9835	} );
9836}
9837
9838// Support: IE<9
9839// Use getAttributeNode to fetch booleans when getAttribute lies
9840if ( !assert( function( el ) {
9841	return el.getAttribute( "disabled" ) == null;
9842} ) ) {
9843	addHandle( booleans, function( elem, name, isXML ) {
9844		var val;
9845		if ( !isXML ) {
9846			return elem[ name ] === true ? name.toLowerCase() :
9847				( val = elem.getAttributeNode( name ) ) && val.specified ?
9848					val.value :
9849					null;
9850		}
9851	} );
9852}
9853
9854return Sizzle;
9855
9856} )( window );
9857
9858
9859
9860jQuery.find = Sizzle;
9861jQuery.expr = Sizzle.selectors;
9862
9863// Deprecated
9864jQuery.expr[ ":" ] = jQuery.expr.pseudos;
9865jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
9866jQuery.text = Sizzle.getText;
9867jQuery.isXMLDoc = Sizzle.isXML;
9868jQuery.contains = Sizzle.contains;
9869jQuery.escapeSelector = Sizzle.escape;
9870
9871
9872
9873
9874var dir = function( elem, dir, until ) {
9875	var matched = [],
9876		truncate = until !== undefined;
9877
9878	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
9879		if ( elem.nodeType === 1 ) {
9880			if ( truncate && jQuery( elem ).is( until ) ) {
9881				break;
9882			}
9883			matched.push( elem );
9884		}
9885	}
9886	return matched;
9887};
9888
9889
9890var siblings = function( n, elem ) {
9891	var matched = [];
9892
9893	for ( ; n; n = n.nextSibling ) {
9894		if ( n.nodeType === 1 && n !== elem ) {
9895			matched.push( n );
9896		}
9897	}
9898
9899	return matched;
9900};
9901
9902
9903var rneedsContext = jQuery.expr.match.needsContext;
9904
9905
9906
9907function nodeName( elem, name ) {
9908
9909	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
9910
9911}
9912var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
9913
9914
9915
9916// Implement the identical functionality for filter and not
9917function winnow( elements, qualifier, not ) {
9918	if ( isFunction( qualifier ) ) {
9919		return jQuery.grep( elements, function( elem, i ) {
9920			return !!qualifier.call( elem, i, elem ) !== not;
9921		} );
9922	}
9923
9924	// Single element
9925	if ( qualifier.nodeType ) {
9926		return jQuery.grep( elements, function( elem ) {
9927			return ( elem === qualifier ) !== not;
9928		} );
9929	}
9930
9931	// Arraylike of elements (jQuery, arguments, Array)
9932	if ( typeof qualifier !== "string" ) {
9933		return jQuery.grep( elements, function( elem ) {
9934			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
9935		} );
9936	}
9937
9938	// Filtered directly for both simple and complex selectors
9939	return jQuery.filter( qualifier, elements, not );
9940}
9941
9942jQuery.filter = function( expr, elems, not ) {
9943	var elem = elems[ 0 ];
9944
9945	if ( not ) {
9946		expr = ":not(" + expr + ")";
9947	}
9948
9949	if ( elems.length === 1 && elem.nodeType === 1 ) {
9950		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
9951	}
9952
9953	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
9954		return elem.nodeType === 1;
9955	} ) );
9956};
9957
9958jQuery.fn.extend( {
9959	find: function( selector ) {
9960		var i, ret,
9961			len = this.length,
9962			self = this;
9963
9964		if ( typeof selector !== "string" ) {
9965			return this.pushStack( jQuery( selector ).filter( function() {
9966				for ( i = 0; i < len; i++ ) {
9967					if ( jQuery.contains( self[ i ], this ) ) {
9968						return true;
9969					}
9970				}
9971			} ) );
9972		}
9973
9974		ret = this.pushStack( [] );
9975
9976		for ( i = 0; i < len; i++ ) {
9977			jQuery.find( selector, self[ i ], ret );
9978		}
9979
9980		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
9981	},
9982	filter: function( selector ) {
9983		return this.pushStack( winnow( this, selector || [], false ) );
9984	},
9985	not: function( selector ) {
9986		return this.pushStack( winnow( this, selector || [], true ) );
9987	},
9988	is: function( selector ) {
9989		return !!winnow(
9990			this,
9991
9992			// If this is a positional/relative selector, check membership in the returned set
9993			// so $("p:first").is("p:last") won't return true for a doc with two "p".
9994			typeof selector === "string" && rneedsContext.test( selector ) ?
9995				jQuery( selector ) :
9996				selector || [],
9997			false
9998		).length;
9999	}
10000} );
10001
10002
10003// Initialize a jQuery object
10004
10005
10006// A central reference to the root jQuery(document)
10007var rootjQuery,
10008
10009	// A simple way to check for HTML strings
10010	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
10011	// Strict HTML recognition (#11290: must start with <)
10012	// Shortcut simple #id case for speed
10013	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
10014
10015	init = jQuery.fn.init = function( selector, context, root ) {
10016		var match, elem;
10017
10018		// HANDLE: $(""), $(null), $(undefined), $(false)
10019		if ( !selector ) {
10020			return this;
10021		}
10022
10023		// Method init() accepts an alternate rootjQuery
10024		// so migrate can support jQuery.sub (gh-2101)
10025		root = root || rootjQuery;
10026
10027		// Handle HTML strings
10028		if ( typeof selector === "string" ) {
10029			if ( selector[ 0 ] === "<" &&
10030				selector[ selector.length - 1 ] === ">" &&
10031				selector.length >= 3 ) {
10032
10033				// Assume that strings that start and end with <> are HTML and skip the regex check
10034				match = [ null, selector, null ];
10035
10036			} else {
10037				match = rquickExpr.exec( selector );
10038			}
10039
10040			// Match html or make sure no context is specified for #id
10041			if ( match && ( match[ 1 ] || !context ) ) {
10042
10043				// HANDLE: $(html) -> $(array)
10044				if ( match[ 1 ] ) {
10045					context = context instanceof jQuery ? context[ 0 ] : context;
10046
10047					// Option to run scripts is true for back-compat
10048					// Intentionally let the error be thrown if parseHTML is not present
10049					jQuery.merge( this, jQuery.parseHTML(
10050						match[ 1 ],
10051						context && context.nodeType ? context.ownerDocument || context : document,
10052						true
10053					) );
10054
10055					// HANDLE: $(html, props)
10056					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
10057						for ( match in context ) {
10058
10059							// Properties of context are called as methods if possible
10060							if ( isFunction( this[ match ] ) ) {
10061								this[ match ]( context[ match ] );
10062
10063							// ...and otherwise set as attributes
10064							} else {
10065								this.attr( match, context[ match ] );
10066							}
10067						}
10068					}
10069
10070					return this;
10071
10072				// HANDLE: $(#id)
10073				} else {
10074					elem = document.getElementById( match[ 2 ] );
10075
10076					if ( elem ) {
10077
10078						// Inject the element directly into the jQuery object
10079						this[ 0 ] = elem;
10080						this.length = 1;
10081					}
10082					return this;
10083				}
10084
10085			// HANDLE: $(expr, $(...))
10086			} else if ( !context || context.jquery ) {
10087				return ( context || root ).find( selector );
10088
10089			// HANDLE: $(expr, context)
10090			// (which is just equivalent to: $(context).find(expr)
10091			} else {
10092				return this.constructor( context ).find( selector );
10093			}
10094
10095		// HANDLE: $(DOMElement)
10096		} else if ( selector.nodeType ) {
10097			this[ 0 ] = selector;
10098			this.length = 1;
10099			return this;
10100
10101		// HANDLE: $(function)
10102		// Shortcut for document ready
10103		} else if ( isFunction( selector ) ) {
10104			return root.ready !== undefined ?
10105				root.ready( selector ) :
10106
10107				// Execute immediately if ready is not present
10108				selector( jQuery );
10109		}
10110
10111		return jQuery.makeArray( selector, this );
10112	};
10113
10114// Give the init function the jQuery prototype for later instantiation
10115init.prototype = jQuery.fn;
10116
10117// Initialize central reference
10118rootjQuery = jQuery( document );
10119
10120
10121var rparentsprev = /^(?:parents|prev(?:Until|All))/,
10122
10123	// Methods guaranteed to produce a unique set when starting from a unique set
10124	guaranteedUnique = {
10125		children: true,
10126		contents: true,
10127		next: true,
10128		prev: true
10129	};
10130
10131jQuery.fn.extend( {
10132	has: function( target ) {
10133		var targets = jQuery( target, this ),
10134			l = targets.length;
10135
10136		return this.filter( function() {
10137			var i = 0;
10138			for ( ; i < l; i++ ) {
10139				if ( jQuery.contains( this, targets[ i ] ) ) {
10140					return true;
10141				}
10142			}
10143		} );
10144	},
10145
10146	closest: function( selectors, context ) {
10147		var cur,
10148			i = 0,
10149			l = this.length,
10150			matched = [],
10151			targets = typeof selectors !== "string" && jQuery( selectors );
10152
10153		// Positional selectors never match, since there's no _selection_ context
10154		if ( !rneedsContext.test( selectors ) ) {
10155			for ( ; i < l; i++ ) {
10156				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
10157
10158					// Always skip document fragments
10159					if ( cur.nodeType < 11 && ( targets ?
10160						targets.index( cur ) > -1 :
10161
10162						// Don't pass non-elements to Sizzle
10163						cur.nodeType === 1 &&
10164							jQuery.find.matchesSelector( cur, selectors ) ) ) {
10165
10166						matched.push( cur );
10167						break;
10168					}
10169				}
10170			}
10171		}
10172
10173		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
10174	},
10175
10176	// Determine the position of an element within the set
10177	index: function( elem ) {
10178
10179		// No argument, return index in parent
10180		if ( !elem ) {
10181			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
10182		}
10183
10184		// Index in selector
10185		if ( typeof elem === "string" ) {
10186			return indexOf.call( jQuery( elem ), this[ 0 ] );
10187		}
10188
10189		// Locate the position of the desired element
10190		return indexOf.call( this,
10191
10192			// If it receives a jQuery object, the first element is used
10193			elem.jquery ? elem[ 0 ] : elem
10194		);
10195	},
10196
10197	add: function( selector, context ) {
10198		return this.pushStack(
10199			jQuery.uniqueSort(
10200				jQuery.merge( this.get(), jQuery( selector, context ) )
10201			)
10202		);
10203	},
10204
10205	addBack: function( selector ) {
10206		return this.add( selector == null ?
10207			this.prevObject : this.prevObject.filter( selector )
10208		);
10209	}
10210} );
10211
10212function sibling( cur, dir ) {
10213	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
10214	return cur;
10215}
10216
10217jQuery.each( {
10218	parent: function( elem ) {
10219		var parent = elem.parentNode;
10220		return parent && parent.nodeType !== 11 ? parent : null;
10221	},
10222	parents: function( elem ) {
10223		return dir( elem, "parentNode" );
10224	},
10225	parentsUntil: function( elem, _i, until ) {
10226		return dir( elem, "parentNode", until );
10227	},
10228	next: function( elem ) {
10229		return sibling( elem, "nextSibling" );
10230	},
10231	prev: function( elem ) {
10232		return sibling( elem, "previousSibling" );
10233	},
10234	nextAll: function( elem ) {
10235		return dir( elem, "nextSibling" );
10236	},
10237	prevAll: function( elem ) {
10238		return dir( elem, "previousSibling" );
10239	},
10240	nextUntil: function( elem, _i, until ) {
10241		return dir( elem, "nextSibling", until );
10242	},
10243	prevUntil: function( elem, _i, until ) {
10244		return dir( elem, "previousSibling", until );
10245	},
10246	siblings: function( elem ) {
10247		return siblings( ( elem.parentNode || {} ).firstChild, elem );
10248	},
10249	children: function( elem ) {
10250		return siblings( elem.firstChild );
10251	},
10252	contents: function( elem ) {
10253		if ( elem.contentDocument != null &&
10254
10255			// Support: IE 11+
10256			// <object> elements with no `data` attribute has an object
10257			// `contentDocument` with a `null` prototype.
10258			getProto( elem.contentDocument ) ) {
10259
10260			return elem.contentDocument;
10261		}
10262
10263		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
10264		// Treat the template element as a regular one in browsers that
10265		// don't support it.
10266		if ( nodeName( elem, "template" ) ) {
10267			elem = elem.content || elem;
10268		}
10269
10270		return jQuery.merge( [], elem.childNodes );
10271	}
10272}, function( name, fn ) {
10273	jQuery.fn[ name ] = function( until, selector ) {
10274		var matched = jQuery.map( this, fn, until );
10275
10276		if ( name.slice( -5 ) !== "Until" ) {
10277			selector = until;
10278		}
10279
10280		if ( selector && typeof selector === "string" ) {
10281			matched = jQuery.filter( selector, matched );
10282		}
10283
10284		if ( this.length > 1 ) {
10285
10286			// Remove duplicates
10287			if ( !guaranteedUnique[ name ] ) {
10288				jQuery.uniqueSort( matched );
10289			}
10290
10291			// Reverse order for parents* and prev-derivatives
10292			if ( rparentsprev.test( name ) ) {
10293				matched.reverse();
10294			}
10295		}
10296
10297		return this.pushStack( matched );
10298	};
10299} );
10300var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
10301
10302
10303
10304// Convert String-formatted options into Object-formatted ones
10305function createOptions( options ) {
10306	var object = {};
10307	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
10308		object[ flag ] = true;
10309	} );
10310	return object;
10311}
10312
10313/*
10314 * Create a callback list using the following parameters:
10315 *
10316 *	options: an optional list of space-separated options that will change how
10317 *			the callback list behaves or a more traditional option object
10318 *
10319 * By default a callback list will act like an event callback list and can be
10320 * "fired" multiple times.
10321 *
10322 * Possible options:
10323 *
10324 *	once:			will ensure the callback list can only be fired once (like a Deferred)
10325 *
10326 *	memory:			will keep track of previous values and will call any callback added
10327 *					after the list has been fired right away with the latest "memorized"
10328 *					values (like a Deferred)
10329 *
10330 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
10331 *
10332 *	stopOnFalse:	interrupt callings when a callback returns false
10333 *
10334 */
10335jQuery.Callbacks = function( options ) {
10336
10337	// Convert options from String-formatted to Object-formatted if needed
10338	// (we check in cache first)
10339	options = typeof options === "string" ?
10340		createOptions( options ) :
10341		jQuery.extend( {}, options );
10342
10343	var // Flag to know if list is currently firing
10344		firing,
10345
10346		// Last fire value for non-forgettable lists
10347		memory,
10348
10349		// Flag to know if list was already fired
10350		fired,
10351
10352		// Flag to prevent firing
10353		locked,
10354
10355		// Actual callback list
10356		list = [],
10357
10358		// Queue of execution data for repeatable lists
10359		queue = [],
10360
10361		// Index of currently firing callback (modified by add/remove as needed)
10362		firingIndex = -1,
10363
10364		// Fire callbacks
10365		fire = function() {
10366
10367			// Enforce single-firing
10368			locked = locked || options.once;
10369
10370			// Execute callbacks for all pending executions,
10371			// respecting firingIndex overrides and runtime changes
10372			fired = firing = true;
10373			for ( ; queue.length; firingIndex = -1 ) {
10374				memory = queue.shift();
10375				while ( ++firingIndex < list.length ) {
10376
10377					// Run callback and check for early termination
10378					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
10379						options.stopOnFalse ) {
10380
10381						// Jump to end and forget the data so .add doesn't re-fire
10382						firingIndex = list.length;
10383						memory = false;
10384					}
10385				}
10386			}
10387
10388			// Forget the data if we're done with it
10389			if ( !options.memory ) {
10390				memory = false;
10391			}
10392
10393			firing = false;
10394
10395			// Clean up if we're done firing for good
10396			if ( locked ) {
10397
10398				// Keep an empty list if we have data for future add calls
10399				if ( memory ) {
10400					list = [];
10401
10402				// Otherwise, this object is spent
10403				} else {
10404					list = "";
10405				}
10406			}
10407		},
10408
10409		// Actual Callbacks object
10410		self = {
10411
10412			// Add a callback or a collection of callbacks to the list
10413			add: function() {
10414				if ( list ) {
10415
10416					// If we have memory from a past run, we should fire after adding
10417					if ( memory && !firing ) {
10418						firingIndex = list.length - 1;
10419						queue.push( memory );
10420					}
10421
10422					( function add( args ) {
10423						jQuery.each( args, function( _, arg ) {
10424							if ( isFunction( arg ) ) {
10425								if ( !options.unique || !self.has( arg ) ) {
10426									list.push( arg );
10427								}
10428							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
10429
10430								// Inspect recursively
10431								add( arg );
10432							}
10433						} );
10434					} )( arguments );
10435
10436					if ( memory && !firing ) {
10437						fire();
10438					}
10439				}
10440				return this;
10441			},
10442
10443			// Remove a callback from the list
10444			remove: function() {
10445				jQuery.each( arguments, function( _, arg ) {
10446					var index;
10447					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
10448						list.splice( index, 1 );
10449
10450						// Handle firing indexes
10451						if ( index <= firingIndex ) {
10452							firingIndex--;
10453						}
10454					}
10455				} );
10456				return this;
10457			},
10458
10459			// Check if a given callback is in the list.
10460			// If no argument is given, return whether or not list has callbacks attached.
10461			has: function( fn ) {
10462				return fn ?
10463					jQuery.inArray( fn, list ) > -1 :
10464					list.length > 0;
10465			},
10466
10467			// Remove all callbacks from the list
10468			empty: function() {
10469				if ( list ) {
10470					list = [];
10471				}
10472				return this;
10473			},
10474
10475			// Disable .fire and .add
10476			// Abort any current/pending executions
10477			// Clear all callbacks and values
10478			disable: function() {
10479				locked = queue = [];
10480				list = memory = "";
10481				return this;
10482			},
10483			disabled: function() {
10484				return !list;
10485			},
10486
10487			// Disable .fire
10488			// Also disable .add unless we have memory (since it would have no effect)
10489			// Abort any pending executions
10490			lock: function() {
10491				locked = queue = [];
10492				if ( !memory && !firing ) {
10493					list = memory = "";
10494				}
10495				return this;
10496			},
10497			locked: function() {
10498				return !!locked;
10499			},
10500
10501			// Call all callbacks with the given context and arguments
10502			fireWith: function( context, args ) {
10503				if ( !locked ) {
10504					args = args || [];
10505					args = [ context, args.slice ? args.slice() : args ];
10506					queue.push( args );
10507					if ( !firing ) {
10508						fire();
10509					}
10510				}
10511				return this;
10512			},
10513
10514			// Call all the callbacks with the given arguments
10515			fire: function() {
10516				self.fireWith( this, arguments );
10517				return this;
10518			},
10519
10520			// To know if the callbacks have already been called at least once
10521			fired: function() {
10522				return !!fired;
10523			}
10524		};
10525
10526	return self;
10527};
10528
10529
10530function Identity( v ) {
10531	return v;
10532}
10533function Thrower( ex ) {
10534	throw ex;
10535}
10536
10537function adoptValue( value, resolve, reject, noValue ) {
10538	var method;
10539
10540	try {
10541
10542		// Check for promise aspect first to privilege synchronous behavior
10543		if ( value && isFunction( ( method = value.promise ) ) ) {
10544			method.call( value ).done( resolve ).fail( reject );
10545
10546		// Other thenables
10547		} else if ( value && isFunction( ( method = value.then ) ) ) {
10548			method.call( value, resolve, reject );
10549
10550		// Other non-thenables
10551		} else {
10552
10553			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
10554			// * false: [ value ].slice( 0 ) => resolve( value )
10555			// * true: [ value ].slice( 1 ) => resolve()
10556			resolve.apply( undefined, [ value ].slice( noValue ) );
10557		}
10558
10559	// For Promises/A+, convert exceptions into rejections
10560	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
10561	// Deferred#then to conditionally suppress rejection.
10562	} catch ( value ) {
10563
10564		// Support: Android 4.0 only
10565		// Strict mode functions invoked without .call/.apply get global-object context
10566		reject.apply( undefined, [ value ] );
10567	}
10568}
10569
10570jQuery.extend( {
10571
10572	Deferred: function( func ) {
10573		var tuples = [
10574
10575				// action, add listener, callbacks,
10576				// ... .then handlers, argument index, [final state]
10577				[ "notify", "progress", jQuery.Callbacks( "memory" ),
10578					jQuery.Callbacks( "memory" ), 2 ],
10579				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
10580					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
10581				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
10582					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
10583			],
10584			state = "pending",
10585			promise = {
10586				state: function() {
10587					return state;
10588				},
10589				always: function() {
10590					deferred.done( arguments ).fail( arguments );
10591					return this;
10592				},
10593				"catch": function( fn ) {
10594					return promise.then( null, fn );
10595				},
10596
10597				// Keep pipe for back-compat
10598				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
10599					var fns = arguments;
10600
10601					return jQuery.Deferred( function( newDefer ) {
10602						jQuery.each( tuples, function( _i, tuple ) {
10603
10604							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
10605							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
10606
10607							// deferred.progress(function() { bind to newDefer or newDefer.notify })
10608							// deferred.done(function() { bind to newDefer or newDefer.resolve })
10609							// deferred.fail(function() { bind to newDefer or newDefer.reject })
10610							deferred[ tuple[ 1 ] ]( function() {
10611								var returned = fn && fn.apply( this, arguments );
10612								if ( returned && isFunction( returned.promise ) ) {
10613									returned.promise()
10614										.progress( newDefer.notify )
10615										.done( newDefer.resolve )
10616										.fail( newDefer.reject );
10617								} else {
10618									newDefer[ tuple[ 0 ] + "With" ](
10619										this,
10620										fn ? [ returned ] : arguments
10621									);
10622								}
10623							} );
10624						} );
10625						fns = null;
10626					} ).promise();
10627				},
10628				then: function( onFulfilled, onRejected, onProgress ) {
10629					var maxDepth = 0;
10630					function resolve( depth, deferred, handler, special ) {
10631						return function() {
10632							var that = this,
10633								args = arguments,
10634								mightThrow = function() {
10635									var returned, then;
10636
10637									// Support: Promises/A+ section 2.3.3.3.3
10638									// https://promisesaplus.com/#point-59
10639									// Ignore double-resolution attempts
10640									if ( depth < maxDepth ) {
10641										return;
10642									}
10643
10644									returned = handler.apply( that, args );
10645
10646									// Support: Promises/A+ section 2.3.1
10647									// https://promisesaplus.com/#point-48
10648									if ( returned === deferred.promise() ) {
10649										throw new TypeError( "Thenable self-resolution" );
10650									}
10651
10652									// Support: Promises/A+ sections 2.3.3.1, 3.5
10653									// https://promisesaplus.com/#point-54
10654									// https://promisesaplus.com/#point-75
10655									// Retrieve `then` only once
10656									then = returned &&
10657
10658										// Support: Promises/A+ section 2.3.4
10659										// https://promisesaplus.com/#point-64
10660										// Only check objects and functions for thenability
10661										( typeof returned === "object" ||
10662											typeof returned === "function" ) &&
10663										returned.then;
10664
10665									// Handle a returned thenable
10666									if ( isFunction( then ) ) {
10667
10668										// Special processors (notify) just wait for resolution
10669										if ( special ) {
10670											then.call(
10671												returned,
10672												resolve( maxDepth, deferred, Identity, special ),
10673												resolve( maxDepth, deferred, Thrower, special )
10674											);
10675
10676										// Normal processors (resolve) also hook into progress
10677										} else {
10678
10679											// ...and disregard older resolution values
10680											maxDepth++;
10681
10682											then.call(
10683												returned,
10684												resolve( maxDepth, deferred, Identity, special ),
10685												resolve( maxDepth, deferred, Thrower, special ),
10686												resolve( maxDepth, deferred, Identity,
10687													deferred.notifyWith )
10688											);
10689										}
10690
10691									// Handle all other returned values
10692									} else {
10693
10694										// Only substitute handlers pass on context
10695										// and multiple values (non-spec behavior)
10696										if ( handler !== Identity ) {
10697											that = undefined;
10698											args = [ returned ];
10699										}
10700
10701										// Process the value(s)
10702										// Default process is resolve
10703										( special || deferred.resolveWith )( that, args );
10704									}
10705								},
10706
10707								// Only normal processors (resolve) catch and reject exceptions
10708								process = special ?
10709									mightThrow :
10710									function() {
10711										try {
10712											mightThrow();
10713										} catch ( e ) {
10714
10715											if ( jQuery.Deferred.exceptionHook ) {
10716												jQuery.Deferred.exceptionHook( e,
10717													process.stackTrace );
10718											}
10719
10720											// Support: Promises/A+ section 2.3.3.3.4.1
10721											// https://promisesaplus.com/#point-61
10722											// Ignore post-resolution exceptions
10723											if ( depth + 1 >= maxDepth ) {
10724
10725												// Only substitute handlers pass on context
10726												// and multiple values (non-spec behavior)
10727												if ( handler !== Thrower ) {
10728													that = undefined;
10729													args = [ e ];
10730												}
10731
10732												deferred.rejectWith( that, args );
10733											}
10734										}
10735									};
10736
10737							// Support: Promises/A+ section 2.3.3.3.1
10738							// https://promisesaplus.com/#point-57
10739							// Re-resolve promises immediately to dodge false rejection from
10740							// subsequent errors
10741							if ( depth ) {
10742								process();
10743							} else {
10744
10745								// Call an optional hook to record the stack, in case of exception
10746								// since it's otherwise lost when execution goes async
10747								if ( jQuery.Deferred.getStackHook ) {
10748									process.stackTrace = jQuery.Deferred.getStackHook();
10749								}
10750								window.setTimeout( process );
10751							}
10752						};
10753					}
10754
10755					return jQuery.Deferred( function( newDefer ) {
10756
10757						// progress_handlers.add( ... )
10758						tuples[ 0 ][ 3 ].add(
10759							resolve(
10760								0,
10761								newDefer,
10762								isFunction( onProgress ) ?
10763									onProgress :
10764									Identity,
10765								newDefer.notifyWith
10766							)
10767						);
10768
10769						// fulfilled_handlers.add( ... )
10770						tuples[ 1 ][ 3 ].add(
10771							resolve(
10772								0,
10773								newDefer,
10774								isFunction( onFulfilled ) ?
10775									onFulfilled :
10776									Identity
10777							)
10778						);
10779
10780						// rejected_handlers.add( ... )
10781						tuples[ 2 ][ 3 ].add(
10782							resolve(
10783								0,
10784								newDefer,
10785								isFunction( onRejected ) ?
10786									onRejected :
10787									Thrower
10788							)
10789						);
10790					} ).promise();
10791				},
10792
10793				// Get a promise for this deferred
10794				// If obj is provided, the promise aspect is added to the object
10795				promise: function( obj ) {
10796					return obj != null ? jQuery.extend( obj, promise ) : promise;
10797				}
10798			},
10799			deferred = {};
10800
10801		// Add list-specific methods
10802		jQuery.each( tuples, function( i, tuple ) {
10803			var list = tuple[ 2 ],
10804				stateString = tuple[ 5 ];
10805
10806			// promise.progress = list.add
10807			// promise.done = list.add
10808			// promise.fail = list.add
10809			promise[ tuple[ 1 ] ] = list.add;
10810
10811			// Handle state
10812			if ( stateString ) {
10813				list.add(
10814					function() {
10815
10816						// state = "resolved" (i.e., fulfilled)
10817						// state = "rejected"
10818						state = stateString;
10819					},
10820
10821					// rejected_callbacks.disable
10822					// fulfilled_callbacks.disable
10823					tuples[ 3 - i ][ 2 ].disable,
10824
10825					// rejected_handlers.disable
10826					// fulfilled_handlers.disable
10827					tuples[ 3 - i ][ 3 ].disable,
10828
10829					// progress_callbacks.lock
10830					tuples[ 0 ][ 2 ].lock,
10831
10832					// progress_handlers.lock
10833					tuples[ 0 ][ 3 ].lock
10834				);
10835			}
10836
10837			// progress_handlers.fire
10838			// fulfilled_handlers.fire
10839			// rejected_handlers.fire
10840			list.add( tuple[ 3 ].fire );
10841
10842			// deferred.notify = function() { deferred.notifyWith(...) }
10843			// deferred.resolve = function() { deferred.resolveWith(...) }
10844			// deferred.reject = function() { deferred.rejectWith(...) }
10845			deferred[ tuple[ 0 ] ] = function() {
10846				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
10847				return this;
10848			};
10849
10850			// deferred.notifyWith = list.fireWith
10851			// deferred.resolveWith = list.fireWith
10852			// deferred.rejectWith = list.fireWith
10853			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
10854		} );
10855
10856		// Make the deferred a promise
10857		promise.promise( deferred );
10858
10859		// Call given func if any
10860		if ( func ) {
10861			func.call( deferred, deferred );
10862		}
10863
10864		// All done!
10865		return deferred;
10866	},
10867
10868	// Deferred helper
10869	when: function( singleValue ) {
10870		var
10871
10872			// count of uncompleted subordinates
10873			remaining = arguments.length,
10874
10875			// count of unprocessed arguments
10876			i = remaining,
10877
10878			// subordinate fulfillment data
10879			resolveContexts = Array( i ),
10880			resolveValues = slice.call( arguments ),
10881
10882			// the primary Deferred
10883			primary = jQuery.Deferred(),
10884
10885			// subordinate callback factory
10886			updateFunc = function( i ) {
10887				return function( value ) {
10888					resolveContexts[ i ] = this;
10889					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
10890					if ( !( --remaining ) ) {
10891						primary.resolveWith( resolveContexts, resolveValues );
10892					}
10893				};
10894			};
10895
10896		// Single- and empty arguments are adopted like Promise.resolve
10897		if ( remaining <= 1 ) {
10898			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
10899				!remaining );
10900
10901			// Use .then() to unwrap secondary thenables (cf. gh-3000)
10902			if ( primary.state() === "pending" ||
10903				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
10904
10905				return primary.then();
10906			}
10907		}
10908
10909		// Multiple arguments are aggregated like Promise.all array elements
10910		while ( i-- ) {
10911			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
10912		}
10913
10914		return primary.promise();
10915	}
10916} );
10917
10918
10919// These usually indicate a programmer mistake during development,
10920// warn about them ASAP rather than swallowing them by default.
10921var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
10922
10923jQuery.Deferred.exceptionHook = function( error, stack ) {
10924
10925	// Support: IE 8 - 9 only
10926	// Console exists when dev tools are open, which can happen at any time
10927	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
10928		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
10929	}
10930};
10931
10932
10933
10934
10935jQuery.readyException = function( error ) {
10936	window.setTimeout( function() {
10937		throw error;
10938	} );
10939};
10940
10941
10942
10943
10944// The deferred used on DOM ready
10945var readyList = jQuery.Deferred();
10946
10947jQuery.fn.ready = function( fn ) {
10948
10949	readyList
10950		.then( fn )
10951
10952		// Wrap jQuery.readyException in a function so that the lookup
10953		// happens at the time of error handling instead of callback
10954		// registration.
10955		.catch( function( error ) {
10956			jQuery.readyException( error );
10957		} );
10958
10959	return this;
10960};
10961
10962jQuery.extend( {
10963
10964	// Is the DOM ready to be used? Set to true once it occurs.
10965	isReady: false,
10966
10967	// A counter to track how many items to wait for before
10968	// the ready event fires. See #6781
10969	readyWait: 1,
10970
10971	// Handle when the DOM is ready
10972	ready: function( wait ) {
10973
10974		// Abort if there are pending holds or we're already ready
10975		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
10976			return;
10977		}
10978
10979		// Remember that the DOM is ready
10980		jQuery.isReady = true;
10981
10982		// If a normal DOM Ready event fired, decrement, and wait if need be
10983		if ( wait !== true && --jQuery.readyWait > 0 ) {
10984			return;
10985		}
10986
10987		// If there are functions bound, to execute
10988		readyList.resolveWith( document, [ jQuery ] );
10989	}
10990} );
10991
10992jQuery.ready.then = readyList.then;
10993
10994// The ready event handler and self cleanup method
10995function completed() {
10996	document.removeEventListener( "DOMContentLoaded", completed );
10997	window.removeEventListener( "load", completed );
10998	jQuery.ready();
10999}
11000
11001// Catch cases where $(document).ready() is called
11002// after the browser event has already occurred.
11003// Support: IE <=9 - 10 only
11004// Older IE sometimes signals "interactive" too soon
11005if ( document.readyState === "complete" ||
11006	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
11007
11008	// Handle it asynchronously to allow scripts the opportunity to delay ready
11009	window.setTimeout( jQuery.ready );
11010
11011} else {
11012
11013	// Use the handy event callback
11014	document.addEventListener( "DOMContentLoaded", completed );
11015
11016	// A fallback to window.onload, that will always work
11017	window.addEventListener( "load", completed );
11018}
11019
11020
11021
11022
11023// Multifunctional method to get and set values of a collection
11024// The value/s can optionally be executed if it's a function
11025var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
11026	var i = 0,
11027		len = elems.length,
11028		bulk = key == null;
11029
11030	// Sets many values
11031	if ( toType( key ) === "object" ) {
11032		chainable = true;
11033		for ( i in key ) {
11034			access( elems, fn, i, key[ i ], true, emptyGet, raw );
11035		}
11036
11037	// Sets one value
11038	} else if ( value !== undefined ) {
11039		chainable = true;
11040
11041		if ( !isFunction( value ) ) {
11042			raw = true;
11043		}
11044
11045		if ( bulk ) {
11046
11047			// Bulk operations run against the entire set
11048			if ( raw ) {
11049				fn.call( elems, value );
11050				fn = null;
11051
11052			// ...except when executing function values
11053			} else {
11054				bulk = fn;
11055				fn = function( elem, _key, value ) {
11056					return bulk.call( jQuery( elem ), value );
11057				};
11058			}
11059		}
11060
11061		if ( fn ) {
11062			for ( ; i < len; i++ ) {
11063				fn(
11064					elems[ i ], key, raw ?
11065						value :
11066						value.call( elems[ i ], i, fn( elems[ i ], key ) )
11067				);
11068			}
11069		}
11070	}
11071
11072	if ( chainable ) {
11073		return elems;
11074	}
11075
11076	// Gets
11077	if ( bulk ) {
11078		return fn.call( elems );
11079	}
11080
11081	return len ? fn( elems[ 0 ], key ) : emptyGet;
11082};
11083
11084
11085// Matches dashed string for camelizing
11086var rmsPrefix = /^-ms-/,
11087	rdashAlpha = /-([a-z])/g;
11088
11089// Used by camelCase as callback to replace()
11090function fcamelCase( _all, letter ) {
11091	return letter.toUpperCase();
11092}
11093
11094// Convert dashed to camelCase; used by the css and data modules
11095// Support: IE <=9 - 11, Edge 12 - 15
11096// Microsoft forgot to hump their vendor prefix (#9572)
11097function camelCase( string ) {
11098	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
11099}
11100var acceptData = function( owner ) {
11101
11102	// Accepts only:
11103	//  - Node
11104	//    - Node.ELEMENT_NODE
11105	//    - Node.DOCUMENT_NODE
11106	//  - Object
11107	//    - Any
11108	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
11109};
11110
11111
11112
11113
11114function Data() {
11115	this.expando = jQuery.expando + Data.uid++;
11116}
11117
11118Data.uid = 1;
11119
11120Data.prototype = {
11121
11122	cache: function( owner ) {
11123
11124		// Check if the owner object already has a cache
11125		var value = owner[ this.expando ];
11126
11127		// If not, create one
11128		if ( !value ) {
11129			value = {};
11130
11131			// We can accept data for non-element nodes in modern browsers,
11132			// but we should not, see #8335.
11133			// Always return an empty object.
11134			if ( acceptData( owner ) ) {
11135
11136				// If it is a node unlikely to be stringify-ed or looped over
11137				// use plain assignment
11138				if ( owner.nodeType ) {
11139					owner[ this.expando ] = value;
11140
11141				// Otherwise secure it in a non-enumerable property
11142				// configurable must be true to allow the property to be
11143				// deleted when data is removed
11144				} else {
11145					Object.defineProperty( owner, this.expando, {
11146						value: value,
11147						configurable: true
11148					} );
11149				}
11150			}
11151		}
11152
11153		return value;
11154	},
11155	set: function( owner, data, value ) {
11156		var prop,
11157			cache = this.cache( owner );
11158
11159		// Handle: [ owner, key, value ] args
11160		// Always use camelCase key (gh-2257)
11161		if ( typeof data === "string" ) {
11162			cache[ camelCase( data ) ] = value;
11163
11164		// Handle: [ owner, { properties } ] args
11165		} else {
11166
11167			// Copy the properties one-by-one to the cache object
11168			for ( prop in data ) {
11169				cache[ camelCase( prop ) ] = data[ prop ];
11170			}
11171		}
11172		return cache;
11173	},
11174	get: function( owner, key ) {
11175		return key === undefined ?
11176			this.cache( owner ) :
11177
11178			// Always use camelCase key (gh-2257)
11179			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
11180	},
11181	access: function( owner, key, value ) {
11182
11183		// In cases where either:
11184		//
11185		//   1. No key was specified
11186		//   2. A string key was specified, but no value provided
11187		//
11188		// Take the "read" path and allow the get method to determine
11189		// which value to return, respectively either:
11190		//
11191		//   1. The entire cache object
11192		//   2. The data stored at the key
11193		//
11194		if ( key === undefined ||
11195				( ( key && typeof key === "string" ) && value === undefined ) ) {
11196
11197			return this.get( owner, key );
11198		}
11199
11200		// When the key is not a string, or both a key and value
11201		// are specified, set or extend (existing objects) with either:
11202		//
11203		//   1. An object of properties
11204		//   2. A key and value
11205		//
11206		this.set( owner, key, value );
11207
11208		// Since the "set" path can have two possible entry points
11209		// return the expected data based on which path was taken[*]
11210		return value !== undefined ? value : key;
11211	},
11212	remove: function( owner, key ) {
11213		var i,
11214			cache = owner[ this.expando ];
11215
11216		if ( cache === undefined ) {
11217			return;
11218		}
11219
11220		if ( key !== undefined ) {
11221
11222			// Support array or space separated string of keys
11223			if ( Array.isArray( key ) ) {
11224
11225				// If key is an array of keys...
11226				// We always set camelCase keys, so remove that.
11227				key = key.map( camelCase );
11228			} else {
11229				key = camelCase( key );
11230
11231				// If a key with the spaces exists, use it.
11232				// Otherwise, create an array by matching non-whitespace
11233				key = key in cache ?
11234					[ key ] :
11235					( key.match( rnothtmlwhite ) || [] );
11236			}
11237
11238			i = key.length;
11239
11240			while ( i-- ) {
11241				delete cache[ key[ i ] ];
11242			}
11243		}
11244
11245		// Remove the expando if there's no more data
11246		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
11247
11248			// Support: Chrome <=35 - 45
11249			// Webkit & Blink performance suffers when deleting properties
11250			// from DOM nodes, so set to undefined instead
11251			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
11252			if ( owner.nodeType ) {
11253				owner[ this.expando ] = undefined;
11254			} else {
11255				delete owner[ this.expando ];
11256			}
11257		}
11258	},
11259	hasData: function( owner ) {
11260		var cache = owner[ this.expando ];
11261		return cache !== undefined && !jQuery.isEmptyObject( cache );
11262	}
11263};
11264var dataPriv = new Data();
11265
11266var dataUser = new Data();
11267
11268
11269
11270//	Implementation Summary
11271//
11272//	1. Enforce API surface and semantic compatibility with 1.9.x branch
11273//	2. Improve the module's maintainability by reducing the storage
11274//		paths to a single mechanism.
11275//	3. Use the same single mechanism to support "private" and "user" data.
11276//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
11277//	5. Avoid exposing implementation details on user objects (eg. expando properties)
11278//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
11279
11280var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
11281	rmultiDash = /[A-Z]/g;
11282
11283function getData( data ) {
11284	if ( data === "true" ) {
11285		return true;
11286	}
11287
11288	if ( data === "false" ) {
11289		return false;
11290	}
11291
11292	if ( data === "null" ) {
11293		return null;
11294	}
11295
11296	// Only convert to a number if it doesn't change the string
11297	if ( data === +data + "" ) {
11298		return +data;
11299	}
11300
11301	if ( rbrace.test( data ) ) {
11302		return JSON.parse( data );
11303	}
11304
11305	return data;
11306}
11307
11308function dataAttr( elem, key, data ) {
11309	var name;
11310
11311	// If nothing was found internally, try to fetch any
11312	// data from the HTML5 data-* attribute
11313	if ( data === undefined && elem.nodeType === 1 ) {
11314		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
11315		data = elem.getAttribute( name );
11316
11317		if ( typeof data === "string" ) {
11318			try {
11319				data = getData( data );
11320			} catch ( e ) {}
11321
11322			// Make sure we set the data so it isn't changed later
11323			dataUser.set( elem, key, data );
11324		} else {
11325			data = undefined;
11326		}
11327	}
11328	return data;
11329}
11330
11331jQuery.extend( {
11332	hasData: function( elem ) {
11333		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
11334	},
11335
11336	data: function( elem, name, data ) {
11337		return dataUser.access( elem, name, data );
11338	},
11339
11340	removeData: function( elem, name ) {
11341		dataUser.remove( elem, name );
11342	},
11343
11344	// TODO: Now that all calls to _data and _removeData have been replaced
11345	// with direct calls to dataPriv methods, these can be deprecated.
11346	_data: function( elem, name, data ) {
11347		return dataPriv.access( elem, name, data );
11348	},
11349
11350	_removeData: function( elem, name ) {
11351		dataPriv.remove( elem, name );
11352	}
11353} );
11354
11355jQuery.fn.extend( {
11356	data: function( key, value ) {
11357		var i, name, data,
11358			elem = this[ 0 ],
11359			attrs = elem && elem.attributes;
11360
11361		// Gets all values
11362		if ( key === undefined ) {
11363			if ( this.length ) {
11364				data = dataUser.get( elem );
11365
11366				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
11367					i = attrs.length;
11368					while ( i-- ) {
11369
11370						// Support: IE 11 only
11371						// The attrs elements can be null (#14894)
11372						if ( attrs[ i ] ) {
11373							name = attrs[ i ].name;
11374							if ( name.indexOf( "data-" ) === 0 ) {
11375								name = camelCase( name.slice( 5 ) );
11376								dataAttr( elem, name, data[ name ] );
11377							}
11378						}
11379					}
11380					dataPriv.set( elem, "hasDataAttrs", true );
11381				}
11382			}
11383
11384			return data;
11385		}
11386
11387		// Sets multiple values
11388		if ( typeof key === "object" ) {
11389			return this.each( function() {
11390				dataUser.set( this, key );
11391			} );
11392		}
11393
11394		return access( this, function( value ) {
11395			var data;
11396
11397			// The calling jQuery object (element matches) is not empty
11398			// (and therefore has an element appears at this[ 0 ]) and the
11399			// `value` parameter was not undefined. An empty jQuery object
11400			// will result in `undefined` for elem = this[ 0 ] which will
11401			// throw an exception if an attempt to read a data cache is made.
11402			if ( elem && value === undefined ) {
11403
11404				// Attempt to get data from the cache
11405				// The key will always be camelCased in Data
11406				data = dataUser.get( elem, key );
11407				if ( data !== undefined ) {
11408					return data;
11409				}
11410
11411				// Attempt to "discover" the data in
11412				// HTML5 custom data-* attrs
11413				data = dataAttr( elem, key );
11414				if ( data !== undefined ) {
11415					return data;
11416				}
11417
11418				// We tried really hard, but the data doesn't exist.
11419				return;
11420			}
11421
11422			// Set the data...
11423			this.each( function() {
11424
11425				// We always store the camelCased key
11426				dataUser.set( this, key, value );
11427			} );
11428		}, null, value, arguments.length > 1, null, true );
11429	},
11430
11431	removeData: function( key ) {
11432		return this.each( function() {
11433			dataUser.remove( this, key );
11434		} );
11435	}
11436} );
11437
11438
11439jQuery.extend( {
11440	queue: function( elem, type, data ) {
11441		var queue;
11442
11443		if ( elem ) {
11444			type = ( type || "fx" ) + "queue";
11445			queue = dataPriv.get( elem, type );
11446
11447			// Speed up dequeue by getting out quickly if this is just a lookup
11448			if ( data ) {
11449				if ( !queue || Array.isArray( data ) ) {
11450					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
11451				} else {
11452					queue.push( data );
11453				}
11454			}
11455			return queue || [];
11456		}
11457	},
11458
11459	dequeue: function( elem, type ) {
11460		type = type || "fx";
11461
11462		var queue = jQuery.queue( elem, type ),
11463			startLength = queue.length,
11464			fn = queue.shift(),
11465			hooks = jQuery._queueHooks( elem, type ),
11466			next = function() {
11467				jQuery.dequeue( elem, type );
11468			};
11469
11470		// If the fx queue is dequeued, always remove the progress sentinel
11471		if ( fn === "inprogress" ) {
11472			fn = queue.shift();
11473			startLength--;
11474		}
11475
11476		if ( fn ) {
11477
11478			// Add a progress sentinel to prevent the fx queue from being
11479			// automatically dequeued
11480			if ( type === "fx" ) {
11481				queue.unshift( "inprogress" );
11482			}
11483
11484			// Clear up the last queue stop function
11485			delete hooks.stop;
11486			fn.call( elem, next, hooks );
11487		}
11488
11489		if ( !startLength && hooks ) {
11490			hooks.empty.fire();
11491		}
11492	},
11493
11494	// Not public - generate a queueHooks object, or return the current one
11495	_queueHooks: function( elem, type ) {
11496		var key = type + "queueHooks";
11497		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
11498			empty: jQuery.Callbacks( "once memory" ).add( function() {
11499				dataPriv.remove( elem, [ type + "queue", key ] );
11500			} )
11501		} );
11502	}
11503} );
11504
11505jQuery.fn.extend( {
11506	queue: function( type, data ) {
11507		var setter = 2;
11508
11509		if ( typeof type !== "string" ) {
11510			data = type;
11511			type = "fx";
11512			setter--;
11513		}
11514
11515		if ( arguments.length < setter ) {
11516			return jQuery.queue( this[ 0 ], type );
11517		}
11518
11519		return data === undefined ?
11520			this :
11521			this.each( function() {
11522				var queue = jQuery.queue( this, type, data );
11523
11524				// Ensure a hooks for this queue
11525				jQuery._queueHooks( this, type );
11526
11527				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
11528					jQuery.dequeue( this, type );
11529				}
11530			} );
11531	},
11532	dequeue: function( type ) {
11533		return this.each( function() {
11534			jQuery.dequeue( this, type );
11535		} );
11536	},
11537	clearQueue: function( type ) {
11538		return this.queue( type || "fx", [] );
11539	},
11540
11541	// Get a promise resolved when queues of a certain type
11542	// are emptied (fx is the type by default)
11543	promise: function( type, obj ) {
11544		var tmp,
11545			count = 1,
11546			defer = jQuery.Deferred(),
11547			elements = this,
11548			i = this.length,
11549			resolve = function() {
11550				if ( !( --count ) ) {
11551					defer.resolveWith( elements, [ elements ] );
11552				}
11553			};
11554
11555		if ( typeof type !== "string" ) {
11556			obj = type;
11557			type = undefined;
11558		}
11559		type = type || "fx";
11560
11561		while ( i-- ) {
11562			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
11563			if ( tmp && tmp.empty ) {
11564				count++;
11565				tmp.empty.add( resolve );
11566			}
11567		}
11568		resolve();
11569		return defer.promise( obj );
11570	}
11571} );
11572var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
11573
11574var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
11575
11576
11577var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
11578
11579var documentElement = document.documentElement;
11580
11581
11582
11583	var isAttached = function( elem ) {
11584			return jQuery.contains( elem.ownerDocument, elem );
11585		},
11586		composed = { composed: true };
11587
11588	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
11589	// Check attachment across shadow DOM boundaries when possible (gh-3504)
11590	// Support: iOS 10.0-10.2 only
11591	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
11592	// leading to errors. We need to check for `getRootNode`.
11593	if ( documentElement.getRootNode ) {
11594		isAttached = function( elem ) {
11595			return jQuery.contains( elem.ownerDocument, elem ) ||
11596				elem.getRootNode( composed ) === elem.ownerDocument;
11597		};
11598	}
11599var isHiddenWithinTree = function( elem, el ) {
11600
11601		// isHiddenWithinTree might be called from jQuery#filter function;
11602		// in that case, element will be second argument
11603		elem = el || elem;
11604
11605		// Inline style trumps all
11606		return elem.style.display === "none" ||
11607			elem.style.display === "" &&
11608
11609			// Otherwise, check computed style
11610			// Support: Firefox <=43 - 45
11611			// Disconnected elements can have computed display: none, so first confirm that elem is
11612			// in the document.
11613			isAttached( elem ) &&
11614
11615			jQuery.css( elem, "display" ) === "none";
11616	};
11617
11618
11619
11620function adjustCSS( elem, prop, valueParts, tween ) {
11621	var adjusted, scale,
11622		maxIterations = 20,
11623		currentValue = tween ?
11624			function() {
11625				return tween.cur();
11626			} :
11627			function() {
11628				return jQuery.css( elem, prop, "" );
11629			},
11630		initial = currentValue(),
11631		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
11632
11633		// Starting value computation is required for potential unit mismatches
11634		initialInUnit = elem.nodeType &&
11635			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
11636			rcssNum.exec( jQuery.css( elem, prop ) );
11637
11638	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
11639
11640		// Support: Firefox <=54
11641		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
11642		initial = initial / 2;
11643
11644		// Trust units reported by jQuery.css
11645		unit = unit || initialInUnit[ 3 ];
11646
11647		// Iteratively approximate from a nonzero starting point
11648		initialInUnit = +initial || 1;
11649
11650		while ( maxIterations-- ) {
11651
11652			// Evaluate and update our best guess (doubling guesses that zero out).
11653			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
11654			jQuery.style( elem, prop, initialInUnit + unit );
11655			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
11656				maxIterations = 0;
11657			}
11658			initialInUnit = initialInUnit / scale;
11659
11660		}
11661
11662		initialInUnit = initialInUnit * 2;
11663		jQuery.style( elem, prop, initialInUnit + unit );
11664
11665		// Make sure we update the tween properties later on
11666		valueParts = valueParts || [];
11667	}
11668
11669	if ( valueParts ) {
11670		initialInUnit = +initialInUnit || +initial || 0;
11671
11672		// Apply relative offset (+=/-=) if specified
11673		adjusted = valueParts[ 1 ] ?
11674			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
11675			+valueParts[ 2 ];
11676		if ( tween ) {
11677			tween.unit = unit;
11678			tween.start = initialInUnit;
11679			tween.end = adjusted;
11680		}
11681	}
11682	return adjusted;
11683}
11684
11685
11686var defaultDisplayMap = {};
11687
11688function getDefaultDisplay( elem ) {
11689	var temp,
11690		doc = elem.ownerDocument,
11691		nodeName = elem.nodeName,
11692		display = defaultDisplayMap[ nodeName ];
11693
11694	if ( display ) {
11695		return display;
11696	}
11697
11698	temp = doc.body.appendChild( doc.createElement( nodeName ) );
11699	display = jQuery.css( temp, "display" );
11700
11701	temp.parentNode.removeChild( temp );
11702
11703	if ( display === "none" ) {
11704		display = "block";
11705	}
11706	defaultDisplayMap[ nodeName ] = display;
11707
11708	return display;
11709}
11710
11711function showHide( elements, show ) {
11712	var display, elem,
11713		values = [],
11714		index = 0,
11715		length = elements.length;
11716
11717	// Determine new display value for elements that need to change
11718	for ( ; index < length; index++ ) {
11719		elem = elements[ index ];
11720		if ( !elem.style ) {
11721			continue;
11722		}
11723
11724		display = elem.style.display;
11725		if ( show ) {
11726
11727			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
11728			// check is required in this first loop unless we have a nonempty display value (either
11729			// inline or about-to-be-restored)
11730			if ( display === "none" ) {
11731				values[ index ] = dataPriv.get( elem, "display" ) || null;
11732				if ( !values[ index ] ) {
11733					elem.style.display = "";
11734				}
11735			}
11736			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
11737				values[ index ] = getDefaultDisplay( elem );
11738			}
11739		} else {
11740			if ( display !== "none" ) {
11741				values[ index ] = "none";
11742
11743				// Remember what we're overwriting
11744				dataPriv.set( elem, "display", display );
11745			}
11746		}
11747	}
11748
11749	// Set the display of the elements in a second loop to avoid constant reflow
11750	for ( index = 0; index < length; index++ ) {
11751		if ( values[ index ] != null ) {
11752			elements[ index ].style.display = values[ index ];
11753		}
11754	}
11755
11756	return elements;
11757}
11758
11759jQuery.fn.extend( {
11760	show: function() {
11761		return showHide( this, true );
11762	},
11763	hide: function() {
11764		return showHide( this );
11765	},
11766	toggle: function( state ) {
11767		if ( typeof state === "boolean" ) {
11768			return state ? this.show() : this.hide();
11769		}
11770
11771		return this.each( function() {
11772			if ( isHiddenWithinTree( this ) ) {
11773				jQuery( this ).show();
11774			} else {
11775				jQuery( this ).hide();
11776			}
11777		} );
11778	}
11779} );
11780var rcheckableType = ( /^(?:checkbox|radio)$/i );
11781
11782var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
11783
11784var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
11785
11786
11787
11788( function() {
11789	var fragment = document.createDocumentFragment(),
11790		div = fragment.appendChild( document.createElement( "div" ) ),
11791		input = document.createElement( "input" );
11792
11793	// Support: Android 4.0 - 4.3 only
11794	// Check state lost if the name is set (#11217)
11795	// Support: Windows Web Apps (WWA)
11796	// `name` and `type` must use .setAttribute for WWA (#14901)
11797	input.setAttribute( "type", "radio" );
11798	input.setAttribute( "checked", "checked" );
11799	input.setAttribute( "name", "t" );
11800
11801	div.appendChild( input );
11802
11803	// Support: Android <=4.1 only
11804	// Older WebKit doesn't clone checked state correctly in fragments
11805	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
11806
11807	// Support: IE <=11 only
11808	// Make sure textarea (and checkbox) defaultValue is properly cloned
11809	div.innerHTML = "<textarea>x</textarea>";
11810	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
11811
11812	// Support: IE <=9 only
11813	// IE <=9 replaces <option> tags with their contents when inserted outside of
11814	// the select element.
11815	div.innerHTML = "<option></option>";
11816	support.option = !!div.lastChild;
11817} )();
11818
11819
11820// We have to close these tags to support XHTML (#13200)
11821var wrapMap = {
11822
11823	// XHTML parsers do not magically insert elements in the
11824	// same way that tag soup parsers do. So we cannot shorten
11825	// this by omitting <tbody> or other required elements.
11826	thead: [ 1, "<table>", "</table>" ],
11827	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
11828	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
11829	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
11830
11831	_default: [ 0, "", "" ]
11832};
11833
11834wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
11835wrapMap.th = wrapMap.td;
11836
11837// Support: IE <=9 only
11838if ( !support.option ) {
11839	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
11840}
11841
11842
11843function getAll( context, tag ) {
11844
11845	// Support: IE <=9 - 11 only
11846	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
11847	var ret;
11848
11849	if ( typeof context.getElementsByTagName !== "undefined" ) {
11850		ret = context.getElementsByTagName( tag || "*" );
11851
11852	} else if ( typeof context.querySelectorAll !== "undefined" ) {
11853		ret = context.querySelectorAll( tag || "*" );
11854
11855	} else {
11856		ret = [];
11857	}
11858
11859	if ( tag === undefined || tag && nodeName( context, tag ) ) {
11860		return jQuery.merge( [ context ], ret );
11861	}
11862
11863	return ret;
11864}
11865
11866
11867// Mark scripts as having already been evaluated
11868function setGlobalEval( elems, refElements ) {
11869	var i = 0,
11870		l = elems.length;
11871
11872	for ( ; i < l; i++ ) {
11873		dataPriv.set(
11874			elems[ i ],
11875			"globalEval",
11876			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
11877		);
11878	}
11879}
11880
11881
11882var rhtml = /<|&#?\w+;/;
11883
11884function buildFragment( elems, context, scripts, selection, ignored ) {
11885	var elem, tmp, tag, wrap, attached, j,
11886		fragment = context.createDocumentFragment(),
11887		nodes = [],
11888		i = 0,
11889		l = elems.length;
11890
11891	for ( ; i < l; i++ ) {
11892		elem = elems[ i ];
11893
11894		if ( elem || elem === 0 ) {
11895
11896			// Add nodes directly
11897			if ( toType( elem ) === "object" ) {
11898
11899				// Support: Android <=4.0 only, PhantomJS 1 only
11900				// push.apply(_, arraylike) throws on ancient WebKit
11901				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
11902
11903			// Convert non-html into a text node
11904			} else if ( !rhtml.test( elem ) ) {
11905				nodes.push( context.createTextNode( elem ) );
11906
11907			// Convert html into DOM nodes
11908			} else {
11909				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
11910
11911				// Deserialize a standard representation
11912				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
11913				wrap = wrapMap[ tag ] || wrapMap._default;
11914				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
11915
11916				// Descend through wrappers to the right content
11917				j = wrap[ 0 ];
11918				while ( j-- ) {
11919					tmp = tmp.lastChild;
11920				}
11921
11922				// Support: Android <=4.0 only, PhantomJS 1 only
11923				// push.apply(_, arraylike) throws on ancient WebKit
11924				jQuery.merge( nodes, tmp.childNodes );
11925
11926				// Remember the top-level container
11927				tmp = fragment.firstChild;
11928
11929				// Ensure the created nodes are orphaned (#12392)
11930				tmp.textContent = "";
11931			}
11932		}
11933	}
11934
11935	// Remove wrapper from fragment
11936	fragment.textContent = "";
11937
11938	i = 0;
11939	while ( ( elem = nodes[ i++ ] ) ) {
11940
11941		// Skip elements already in the context collection (trac-4087)
11942		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
11943			if ( ignored ) {
11944				ignored.push( elem );
11945			}
11946			continue;
11947		}
11948
11949		attached = isAttached( elem );
11950
11951		// Append to fragment
11952		tmp = getAll( fragment.appendChild( elem ), "script" );
11953
11954		// Preserve script evaluation history
11955		if ( attached ) {
11956			setGlobalEval( tmp );
11957		}
11958
11959		// Capture executables
11960		if ( scripts ) {
11961			j = 0;
11962			while ( ( elem = tmp[ j++ ] ) ) {
11963				if ( rscriptType.test( elem.type || "" ) ) {
11964					scripts.push( elem );
11965				}
11966			}
11967		}
11968	}
11969
11970	return fragment;
11971}
11972
11973
11974var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
11975
11976function returnTrue() {
11977	return true;
11978}
11979
11980function returnFalse() {
11981	return false;
11982}
11983
11984// Support: IE <=9 - 11+
11985// focus() and blur() are asynchronous, except when they are no-op.
11986// So expect focus to be synchronous when the element is already active,
11987// and blur to be synchronous when the element is not already active.
11988// (focus and blur are always synchronous in other supported browsers,
11989// this just defines when we can count on it).
11990function expectSync( elem, type ) {
11991	return ( elem === safeActiveElement() ) === ( type === "focus" );
11992}
11993
11994// Support: IE <=9 only
11995// Accessing document.activeElement can throw unexpectedly
11996// https://bugs.jquery.com/ticket/13393
11997function safeActiveElement() {
11998	try {
11999		return document.activeElement;
12000	} catch ( err ) { }
12001}
12002
12003function on( elem, types, selector, data, fn, one ) {
12004	var origFn, type;
12005
12006	// Types can be a map of types/handlers
12007	if ( typeof types === "object" ) {
12008
12009		// ( types-Object, selector, data )
12010		if ( typeof selector !== "string" ) {
12011
12012			// ( types-Object, data )
12013			data = data || selector;
12014			selector = undefined;
12015		}
12016		for ( type in types ) {
12017			on( elem, type, selector, data, types[ type ], one );
12018		}
12019		return elem;
12020	}
12021
12022	if ( data == null && fn == null ) {
12023
12024		// ( types, fn )
12025		fn = selector;
12026		data = selector = undefined;
12027	} else if ( fn == null ) {
12028		if ( typeof selector === "string" ) {
12029
12030			// ( types, selector, fn )
12031			fn = data;
12032			data = undefined;
12033		} else {
12034
12035			// ( types, data, fn )
12036			fn = data;
12037			data = selector;
12038			selector = undefined;
12039		}
12040	}
12041	if ( fn === false ) {
12042		fn = returnFalse;
12043	} else if ( !fn ) {
12044		return elem;
12045	}
12046
12047	if ( one === 1 ) {
12048		origFn = fn;
12049		fn = function( event ) {
12050
12051			// Can use an empty set, since event contains the info
12052			jQuery().off( event );
12053			return origFn.apply( this, arguments );
12054		};
12055
12056		// Use same guid so caller can remove using origFn
12057		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
12058	}
12059	return elem.each( function() {
12060		jQuery.event.add( this, types, fn, data, selector );
12061	} );
12062}
12063
12064/*
12065 * Helper functions for managing events -- not part of the public interface.
12066 * Props to Dean Edwards' addEvent library for many of the ideas.
12067 */
12068jQuery.event = {
12069
12070	global: {},
12071
12072	add: function( elem, types, handler, data, selector ) {
12073
12074		var handleObjIn, eventHandle, tmp,
12075			events, t, handleObj,
12076			special, handlers, type, namespaces, origType,
12077			elemData = dataPriv.get( elem );
12078
12079		// Only attach events to objects that accept data
12080		if ( !acceptData( elem ) ) {
12081			return;
12082		}
12083
12084		// Caller can pass in an object of custom data in lieu of the handler
12085		if ( handler.handler ) {
12086			handleObjIn = handler;
12087			handler = handleObjIn.handler;
12088			selector = handleObjIn.selector;
12089		}
12090
12091		// Ensure that invalid selectors throw exceptions at attach time
12092		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
12093		if ( selector ) {
12094			jQuery.find.matchesSelector( documentElement, selector );
12095		}
12096
12097		// Make sure that the handler has a unique ID, used to find/remove it later
12098		if ( !handler.guid ) {
12099			handler.guid = jQuery.guid++;
12100		}
12101
12102		// Init the element's event structure and main handler, if this is the first
12103		if ( !( events = elemData.events ) ) {
12104			events = elemData.events = Object.create( null );
12105		}
12106		if ( !( eventHandle = elemData.handle ) ) {
12107			eventHandle = elemData.handle = function( e ) {
12108
12109				// Discard the second event of a jQuery.event.trigger() and
12110				// when an event is called after a page has unloaded
12111				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
12112					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
12113			};
12114		}
12115
12116		// Handle multiple events separated by a space
12117		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12118		t = types.length;
12119		while ( t-- ) {
12120			tmp = rtypenamespace.exec( types[ t ] ) || [];
12121			type = origType = tmp[ 1 ];
12122			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12123
12124			// There *must* be a type, no attaching namespace-only handlers
12125			if ( !type ) {
12126				continue;
12127			}
12128
12129			// If event changes its type, use the special event handlers for the changed type
12130			special = jQuery.event.special[ type ] || {};
12131
12132			// If selector defined, determine special event api type, otherwise given type
12133			type = ( selector ? special.delegateType : special.bindType ) || type;
12134
12135			// Update special based on newly reset type
12136			special = jQuery.event.special[ type ] || {};
12137
12138			// handleObj is passed to all event handlers
12139			handleObj = jQuery.extend( {
12140				type: type,
12141				origType: origType,
12142				data: data,
12143				handler: handler,
12144				guid: handler.guid,
12145				selector: selector,
12146				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
12147				namespace: namespaces.join( "." )
12148			}, handleObjIn );
12149
12150			// Init the event handler queue if we're the first
12151			if ( !( handlers = events[ type ] ) ) {
12152				handlers = events[ type ] = [];
12153				handlers.delegateCount = 0;
12154
12155				// Only use addEventListener if the special events handler returns false
12156				if ( !special.setup ||
12157					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
12158
12159					if ( elem.addEventListener ) {
12160						elem.addEventListener( type, eventHandle );
12161					}
12162				}
12163			}
12164
12165			if ( special.add ) {
12166				special.add.call( elem, handleObj );
12167
12168				if ( !handleObj.handler.guid ) {
12169					handleObj.handler.guid = handler.guid;
12170				}
12171			}
12172
12173			// Add to the element's handler list, delegates in front
12174			if ( selector ) {
12175				handlers.splice( handlers.delegateCount++, 0, handleObj );
12176			} else {
12177				handlers.push( handleObj );
12178			}
12179
12180			// Keep track of which events have ever been used, for event optimization
12181			jQuery.event.global[ type ] = true;
12182		}
12183
12184	},
12185
12186	// Detach an event or set of events from an element
12187	remove: function( elem, types, handler, selector, mappedTypes ) {
12188
12189		var j, origCount, tmp,
12190			events, t, handleObj,
12191			special, handlers, type, namespaces, origType,
12192			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
12193
12194		if ( !elemData || !( events = elemData.events ) ) {
12195			return;
12196		}
12197
12198		// Once for each type.namespace in types; type may be omitted
12199		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12200		t = types.length;
12201		while ( t-- ) {
12202			tmp = rtypenamespace.exec( types[ t ] ) || [];
12203			type = origType = tmp[ 1 ];
12204			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12205
12206			// Unbind all events (on this namespace, if provided) for the element
12207			if ( !type ) {
12208				for ( type in events ) {
12209					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
12210				}
12211				continue;
12212			}
12213
12214			special = jQuery.event.special[ type ] || {};
12215			type = ( selector ? special.delegateType : special.bindType ) || type;
12216			handlers = events[ type ] || [];
12217			tmp = tmp[ 2 ] &&
12218				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
12219
12220			// Remove matching events
12221			origCount = j = handlers.length;
12222			while ( j-- ) {
12223				handleObj = handlers[ j ];
12224
12225				if ( ( mappedTypes || origType === handleObj.origType ) &&
12226					( !handler || handler.guid === handleObj.guid ) &&
12227					( !tmp || tmp.test( handleObj.namespace ) ) &&
12228					( !selector || selector === handleObj.selector ||
12229						selector === "**" && handleObj.selector ) ) {
12230					handlers.splice( j, 1 );
12231
12232					if ( handleObj.selector ) {
12233						handlers.delegateCount--;
12234					}
12235					if ( special.remove ) {
12236						special.remove.call( elem, handleObj );
12237					}
12238				}
12239			}
12240
12241			// Remove generic event handler if we removed something and no more handlers exist
12242			// (avoids potential for endless recursion during removal of special event handlers)
12243			if ( origCount && !handlers.length ) {
12244				if ( !special.teardown ||
12245					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
12246
12247					jQuery.removeEvent( elem, type, elemData.handle );
12248				}
12249
12250				delete events[ type ];
12251			}
12252		}
12253
12254		// Remove data and the expando if it's no longer used
12255		if ( jQuery.isEmptyObject( events ) ) {
12256			dataPriv.remove( elem, "handle events" );
12257		}
12258	},
12259
12260	dispatch: function( nativeEvent ) {
12261
12262		var i, j, ret, matched, handleObj, handlerQueue,
12263			args = new Array( arguments.length ),
12264
12265			// Make a writable jQuery.Event from the native event object
12266			event = jQuery.event.fix( nativeEvent ),
12267
12268			handlers = (
12269				dataPriv.get( this, "events" ) || Object.create( null )
12270			)[ event.type ] || [],
12271			special = jQuery.event.special[ event.type ] || {};
12272
12273		// Use the fix-ed jQuery.Event rather than the (read-only) native event
12274		args[ 0 ] = event;
12275
12276		for ( i = 1; i < arguments.length; i++ ) {
12277			args[ i ] = arguments[ i ];
12278		}
12279
12280		event.delegateTarget = this;
12281
12282		// Call the preDispatch hook for the mapped type, and let it bail if desired
12283		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
12284			return;
12285		}
12286
12287		// Determine handlers
12288		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
12289
12290		// Run delegates first; they may want to stop propagation beneath us
12291		i = 0;
12292		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
12293			event.currentTarget = matched.elem;
12294
12295			j = 0;
12296			while ( ( handleObj = matched.handlers[ j++ ] ) &&
12297				!event.isImmediatePropagationStopped() ) {
12298
12299				// If the event is namespaced, then each handler is only invoked if it is
12300				// specially universal or its namespaces are a superset of the event's.
12301				if ( !event.rnamespace || handleObj.namespace === false ||
12302					event.rnamespace.test( handleObj.namespace ) ) {
12303
12304					event.handleObj = handleObj;
12305					event.data = handleObj.data;
12306
12307					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
12308						handleObj.handler ).apply( matched.elem, args );
12309
12310					if ( ret !== undefined ) {
12311						if ( ( event.result = ret ) === false ) {
12312							event.preventDefault();
12313							event.stopPropagation();
12314						}
12315					}
12316				}
12317			}
12318		}
12319
12320		// Call the postDispatch hook for the mapped type
12321		if ( special.postDispatch ) {
12322			special.postDispatch.call( this, event );
12323		}
12324
12325		return event.result;
12326	},
12327
12328	handlers: function( event, handlers ) {
12329		var i, handleObj, sel, matchedHandlers, matchedSelectors,
12330			handlerQueue = [],
12331			delegateCount = handlers.delegateCount,
12332			cur = event.target;
12333
12334		// Find delegate handlers
12335		if ( delegateCount &&
12336
12337			// Support: IE <=9
12338			// Black-hole SVG <use> instance trees (trac-13180)
12339			cur.nodeType &&
12340
12341			// Support: Firefox <=42
12342			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
12343			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
12344			// Support: IE 11 only
12345			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
12346			!( event.type === "click" && event.button >= 1 ) ) {
12347
12348			for ( ; cur !== this; cur = cur.parentNode || this ) {
12349
12350				// Don't check non-elements (#13208)
12351				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
12352				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
12353					matchedHandlers = [];
12354					matchedSelectors = {};
12355					for ( i = 0; i < delegateCount; i++ ) {
12356						handleObj = handlers[ i ];
12357
12358						// Don't conflict with Object.prototype properties (#13203)
12359						sel = handleObj.selector + " ";
12360
12361						if ( matchedSelectors[ sel ] === undefined ) {
12362							matchedSelectors[ sel ] = handleObj.needsContext ?
12363								jQuery( sel, this ).index( cur ) > -1 :
12364								jQuery.find( sel, this, null, [ cur ] ).length;
12365						}
12366						if ( matchedSelectors[ sel ] ) {
12367							matchedHandlers.push( handleObj );
12368						}
12369					}
12370					if ( matchedHandlers.length ) {
12371						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
12372					}
12373				}
12374			}
12375		}
12376
12377		// Add the remaining (directly-bound) handlers
12378		cur = this;
12379		if ( delegateCount < handlers.length ) {
12380			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
12381		}
12382
12383		return handlerQueue;
12384	},
12385
12386	addProp: function( name, hook ) {
12387		Object.defineProperty( jQuery.Event.prototype, name, {
12388			enumerable: true,
12389			configurable: true,
12390
12391			get: isFunction( hook ) ?
12392				function() {
12393					if ( this.originalEvent ) {
12394						return hook( this.originalEvent );
12395					}
12396				} :
12397				function() {
12398					if ( this.originalEvent ) {
12399						return this.originalEvent[ name ];
12400					}
12401				},
12402
12403			set: function( value ) {
12404				Object.defineProperty( this, name, {
12405					enumerable: true,
12406					configurable: true,
12407					writable: true,
12408					value: value
12409				} );
12410			}
12411		} );
12412	},
12413
12414	fix: function( originalEvent ) {
12415		return originalEvent[ jQuery.expando ] ?
12416			originalEvent :
12417			new jQuery.Event( originalEvent );
12418	},
12419
12420	special: {
12421		load: {
12422
12423			// Prevent triggered image.load events from bubbling to window.load
12424			noBubble: true
12425		},
12426		click: {
12427
12428			// Utilize native event to ensure correct state for checkable inputs
12429			setup: function( data ) {
12430
12431				// For mutual compressibility with _default, replace `this` access with a local var.
12432				// `|| data` is dead code meant only to preserve the variable through minification.
12433				var el = this || data;
12434
12435				// Claim the first handler
12436				if ( rcheckableType.test( el.type ) &&
12437					el.click && nodeName( el, "input" ) ) {
12438
12439					// dataPriv.set( el, "click", ... )
12440					leverageNative( el, "click", returnTrue );
12441				}
12442
12443				// Return false to allow normal processing in the caller
12444				return false;
12445			},
12446			trigger: function( data ) {
12447
12448				// For mutual compressibility with _default, replace `this` access with a local var.
12449				// `|| data` is dead code meant only to preserve the variable through minification.
12450				var el = this || data;
12451
12452				// Force setup before triggering a click
12453				if ( rcheckableType.test( el.type ) &&
12454					el.click && nodeName( el, "input" ) ) {
12455
12456					leverageNative( el, "click" );
12457				}
12458
12459				// Return non-false to allow normal event-path propagation
12460				return true;
12461			},
12462
12463			// For cross-browser consistency, suppress native .click() on links
12464			// Also prevent it if we're currently inside a leveraged native-event stack
12465			_default: function( event ) {
12466				var target = event.target;
12467				return rcheckableType.test( target.type ) &&
12468					target.click && nodeName( target, "input" ) &&
12469					dataPriv.get( target, "click" ) ||
12470					nodeName( target, "a" );
12471			}
12472		},
12473
12474		beforeunload: {
12475			postDispatch: function( event ) {
12476
12477				// Support: Firefox 20+
12478				// Firefox doesn't alert if the returnValue field is not set.
12479				if ( event.result !== undefined && event.originalEvent ) {
12480					event.originalEvent.returnValue = event.result;
12481				}
12482			}
12483		}
12484	}
12485};
12486
12487// Ensure the presence of an event listener that handles manually-triggered
12488// synthetic events by interrupting progress until reinvoked in response to
12489// *native* events that it fires directly, ensuring that state changes have
12490// already occurred before other listeners are invoked.
12491function leverageNative( el, type, expectSync ) {
12492
12493	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
12494	if ( !expectSync ) {
12495		if ( dataPriv.get( el, type ) === undefined ) {
12496			jQuery.event.add( el, type, returnTrue );
12497		}
12498		return;
12499	}
12500
12501	// Register the controller as a special universal handler for all event namespaces
12502	dataPriv.set( el, type, false );
12503	jQuery.event.add( el, type, {
12504		namespace: false,
12505		handler: function( event ) {
12506			var notAsync, result,
12507				saved = dataPriv.get( this, type );
12508
12509			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
12510
12511				// Interrupt processing of the outer synthetic .trigger()ed event
12512				// Saved data should be false in such cases, but might be a leftover capture object
12513				// from an async native handler (gh-4350)
12514				if ( !saved.length ) {
12515
12516					// Store arguments for use when handling the inner native event
12517					// There will always be at least one argument (an event object), so this array
12518					// will not be confused with a leftover capture object.
12519					saved = slice.call( arguments );
12520					dataPriv.set( this, type, saved );
12521
12522					// Trigger the native event and capture its result
12523					// Support: IE <=9 - 11+
12524					// focus() and blur() are asynchronous
12525					notAsync = expectSync( this, type );
12526					this[ type ]();
12527					result = dataPriv.get( this, type );
12528					if ( saved !== result || notAsync ) {
12529						dataPriv.set( this, type, false );
12530					} else {
12531						result = {};
12532					}
12533					if ( saved !== result ) {
12534
12535						// Cancel the outer synthetic event
12536						event.stopImmediatePropagation();
12537						event.preventDefault();
12538
12539						// Support: Chrome 86+
12540						// In Chrome, if an element having a focusout handler is blurred by
12541						// clicking outside of it, it invokes the handler synchronously. If
12542						// that handler calls `.remove()` on the element, the data is cleared,
12543						// leaving `result` undefined. We need to guard against this.
12544						return result && result.value;
12545					}
12546
12547				// If this is an inner synthetic event for an event with a bubbling surrogate
12548				// (focus or blur), assume that the surrogate already propagated from triggering the
12549				// native event and prevent that from happening again here.
12550				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
12551				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
12552				// less bad than duplication.
12553				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
12554					event.stopPropagation();
12555				}
12556
12557			// If this is a native event triggered above, everything is now in order
12558			// Fire an inner synthetic event with the original arguments
12559			} else if ( saved.length ) {
12560
12561				// ...and capture the result
12562				dataPriv.set( this, type, {
12563					value: jQuery.event.trigger(
12564
12565						// Support: IE <=9 - 11+
12566						// Extend with the prototype to reset the above stopImmediatePropagation()
12567						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
12568						saved.slice( 1 ),
12569						this
12570					)
12571				} );
12572
12573				// Abort handling of the native event
12574				event.stopImmediatePropagation();
12575			}
12576		}
12577	} );
12578}
12579
12580jQuery.removeEvent = function( elem, type, handle ) {
12581
12582	// This "if" is needed for plain objects
12583	if ( elem.removeEventListener ) {
12584		elem.removeEventListener( type, handle );
12585	}
12586};
12587
12588jQuery.Event = function( src, props ) {
12589
12590	// Allow instantiation without the 'new' keyword
12591	if ( !( this instanceof jQuery.Event ) ) {
12592		return new jQuery.Event( src, props );
12593	}
12594
12595	// Event object
12596	if ( src && src.type ) {
12597		this.originalEvent = src;
12598		this.type = src.type;
12599
12600		// Events bubbling up the document may have been marked as prevented
12601		// by a handler lower down the tree; reflect the correct value.
12602		this.isDefaultPrevented = src.defaultPrevented ||
12603				src.defaultPrevented === undefined &&
12604
12605				// Support: Android <=2.3 only
12606				src.returnValue === false ?
12607			returnTrue :
12608			returnFalse;
12609
12610		// Create target properties
12611		// Support: Safari <=6 - 7 only
12612		// Target should not be a text node (#504, #13143)
12613		this.target = ( src.target && src.target.nodeType === 3 ) ?
12614			src.target.parentNode :
12615			src.target;
12616
12617		this.currentTarget = src.currentTarget;
12618		this.relatedTarget = src.relatedTarget;
12619
12620	// Event type
12621	} else {
12622		this.type = src;
12623	}
12624
12625	// Put explicitly provided properties onto the event object
12626	if ( props ) {
12627		jQuery.extend( this, props );
12628	}
12629
12630	// Create a timestamp if incoming event doesn't have one
12631	this.timeStamp = src && src.timeStamp || Date.now();
12632
12633	// Mark it as fixed
12634	this[ jQuery.expando ] = true;
12635};
12636
12637// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
12638// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
12639jQuery.Event.prototype = {
12640	constructor: jQuery.Event,
12641	isDefaultPrevented: returnFalse,
12642	isPropagationStopped: returnFalse,
12643	isImmediatePropagationStopped: returnFalse,
12644	isSimulated: false,
12645
12646	preventDefault: function() {
12647		var e = this.originalEvent;
12648
12649		this.isDefaultPrevented = returnTrue;
12650
12651		if ( e && !this.isSimulated ) {
12652			e.preventDefault();
12653		}
12654	},
12655	stopPropagation: function() {
12656		var e = this.originalEvent;
12657
12658		this.isPropagationStopped = returnTrue;
12659
12660		if ( e && !this.isSimulated ) {
12661			e.stopPropagation();
12662		}
12663	},
12664	stopImmediatePropagation: function() {
12665		var e = this.originalEvent;
12666
12667		this.isImmediatePropagationStopped = returnTrue;
12668
12669		if ( e && !this.isSimulated ) {
12670			e.stopImmediatePropagation();
12671		}
12672
12673		this.stopPropagation();
12674	}
12675};
12676
12677// Includes all common event props including KeyEvent and MouseEvent specific props
12678jQuery.each( {
12679	altKey: true,
12680	bubbles: true,
12681	cancelable: true,
12682	changedTouches: true,
12683	ctrlKey: true,
12684	detail: true,
12685	eventPhase: true,
12686	metaKey: true,
12687	pageX: true,
12688	pageY: true,
12689	shiftKey: true,
12690	view: true,
12691	"char": true,
12692	code: true,
12693	charCode: true,
12694	key: true,
12695	keyCode: true,
12696	button: true,
12697	buttons: true,
12698	clientX: true,
12699	clientY: true,
12700	offsetX: true,
12701	offsetY: true,
12702	pointerId: true,
12703	pointerType: true,
12704	screenX: true,
12705	screenY: true,
12706	targetTouches: true,
12707	toElement: true,
12708	touches: true,
12709	which: true
12710}, jQuery.event.addProp );
12711
12712jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
12713	jQuery.event.special[ type ] = {
12714
12715		// Utilize native event if possible so blur/focus sequence is correct
12716		setup: function() {
12717
12718			// Claim the first handler
12719			// dataPriv.set( this, "focus", ... )
12720			// dataPriv.set( this, "blur", ... )
12721			leverageNative( this, type, expectSync );
12722
12723			// Return false to allow normal processing in the caller
12724			return false;
12725		},
12726		trigger: function() {
12727
12728			// Force setup before trigger
12729			leverageNative( this, type );
12730
12731			// Return non-false to allow normal event-path propagation
12732			return true;
12733		},
12734
12735		// Suppress native focus or blur as it's already being fired
12736		// in leverageNative.
12737		_default: function() {
12738			return true;
12739		},
12740
12741		delegateType: delegateType
12742	};
12743} );
12744
12745// Create mouseenter/leave events using mouseover/out and event-time checks
12746// so that event delegation works in jQuery.
12747// Do the same for pointerenter/pointerleave and pointerover/pointerout
12748//
12749// Support: Safari 7 only
12750// Safari sends mouseenter too often; see:
12751// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
12752// for the description of the bug (it existed in older Chrome versions as well).
12753jQuery.each( {
12754	mouseenter: "mouseover",
12755	mouseleave: "mouseout",
12756	pointerenter: "pointerover",
12757	pointerleave: "pointerout"
12758}, function( orig, fix ) {
12759	jQuery.event.special[ orig ] = {
12760		delegateType: fix,
12761		bindType: fix,
12762
12763		handle: function( event ) {
12764			var ret,
12765				target = this,
12766				related = event.relatedTarget,
12767				handleObj = event.handleObj;
12768
12769			// For mouseenter/leave call the handler if related is outside the target.
12770			// NB: No relatedTarget if the mouse left/entered the browser window
12771			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
12772				event.type = handleObj.origType;
12773				ret = handleObj.handler.apply( this, arguments );
12774				event.type = fix;
12775			}
12776			return ret;
12777		}
12778	};
12779} );
12780
12781jQuery.fn.extend( {
12782
12783	on: function( types, selector, data, fn ) {
12784		return on( this, types, selector, data, fn );
12785	},
12786	one: function( types, selector, data, fn ) {
12787		return on( this, types, selector, data, fn, 1 );
12788	},
12789	off: function( types, selector, fn ) {
12790		var handleObj, type;
12791		if ( types && types.preventDefault && types.handleObj ) {
12792
12793			// ( event )  dispatched jQuery.Event
12794			handleObj = types.handleObj;
12795			jQuery( types.delegateTarget ).off(
12796				handleObj.namespace ?
12797					handleObj.origType + "." + handleObj.namespace :
12798					handleObj.origType,
12799				handleObj.selector,
12800				handleObj.handler
12801			);
12802			return this;
12803		}
12804		if ( typeof types === "object" ) {
12805
12806			// ( types-object [, selector] )
12807			for ( type in types ) {
12808				this.off( type, selector, types[ type ] );
12809			}
12810			return this;
12811		}
12812		if ( selector === false || typeof selector === "function" ) {
12813
12814			// ( types [, fn] )
12815			fn = selector;
12816			selector = undefined;
12817		}
12818		if ( fn === false ) {
12819			fn = returnFalse;
12820		}
12821		return this.each( function() {
12822			jQuery.event.remove( this, types, fn, selector );
12823		} );
12824	}
12825} );
12826
12827
12828var
12829
12830	// Support: IE <=10 - 11, Edge 12 - 13 only
12831	// In IE/Edge using regex groups here causes severe slowdowns.
12832	// See https://connect.microsoft.com/IE/feedback/details/1736512/
12833	rnoInnerhtml = /<script|<style|<link/i,
12834
12835	// checked="checked" or checked
12836	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
12837	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
12838
12839// Prefer a tbody over its parent table for containing new rows
12840function manipulationTarget( elem, content ) {
12841	if ( nodeName( elem, "table" ) &&
12842		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
12843
12844		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
12845	}
12846
12847	return elem;
12848}
12849
12850// Replace/restore the type attribute of script elements for safe DOM manipulation
12851function disableScript( elem ) {
12852	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
12853	return elem;
12854}
12855function restoreScript( elem ) {
12856	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
12857		elem.type = elem.type.slice( 5 );
12858	} else {
12859		elem.removeAttribute( "type" );
12860	}
12861
12862	return elem;
12863}
12864
12865function cloneCopyEvent( src, dest ) {
12866	var i, l, type, pdataOld, udataOld, udataCur, events;
12867
12868	if ( dest.nodeType !== 1 ) {
12869		return;
12870	}
12871
12872	// 1. Copy private data: events, handlers, etc.
12873	if ( dataPriv.hasData( src ) ) {
12874		pdataOld = dataPriv.get( src );
12875		events = pdataOld.events;
12876
12877		if ( events ) {
12878			dataPriv.remove( dest, "handle events" );
12879
12880			for ( type in events ) {
12881				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
12882					jQuery.event.add( dest, type, events[ type ][ i ] );
12883				}
12884			}
12885		}
12886	}
12887
12888	// 2. Copy user data
12889	if ( dataUser.hasData( src ) ) {
12890		udataOld = dataUser.access( src );
12891		udataCur = jQuery.extend( {}, udataOld );
12892
12893		dataUser.set( dest, udataCur );
12894	}
12895}
12896
12897// Fix IE bugs, see support tests
12898function fixInput( src, dest ) {
12899	var nodeName = dest.nodeName.toLowerCase();
12900
12901	// Fails to persist the checked state of a cloned checkbox or radio button.
12902	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
12903		dest.checked = src.checked;
12904
12905	// Fails to return the selected option to the default selected state when cloning options
12906	} else if ( nodeName === "input" || nodeName === "textarea" ) {
12907		dest.defaultValue = src.defaultValue;
12908	}
12909}
12910
12911function domManip( collection, args, callback, ignored ) {
12912
12913	// Flatten any nested arrays
12914	args = flat( args );
12915
12916	var fragment, first, scripts, hasScripts, node, doc,
12917		i = 0,
12918		l = collection.length,
12919		iNoClone = l - 1,
12920		value = args[ 0 ],
12921		valueIsFunction = isFunction( value );
12922
12923	// We can't cloneNode fragments that contain checked, in WebKit
12924	if ( valueIsFunction ||
12925			( l > 1 && typeof value === "string" &&
12926				!support.checkClone && rchecked.test( value ) ) ) {
12927		return collection.each( function( index ) {
12928			var self = collection.eq( index );
12929			if ( valueIsFunction ) {
12930				args[ 0 ] = value.call( this, index, self.html() );
12931			}
12932			domManip( self, args, callback, ignored );
12933		} );
12934	}
12935
12936	if ( l ) {
12937		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
12938		first = fragment.firstChild;
12939
12940		if ( fragment.childNodes.length === 1 ) {
12941			fragment = first;
12942		}
12943
12944		// Require either new content or an interest in ignored elements to invoke the callback
12945		if ( first || ignored ) {
12946			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
12947			hasScripts = scripts.length;
12948
12949			// Use the original fragment for the last item
12950			// instead of the first because it can end up
12951			// being emptied incorrectly in certain situations (#8070).
12952			for ( ; i < l; i++ ) {
12953				node = fragment;
12954
12955				if ( i !== iNoClone ) {
12956					node = jQuery.clone( node, true, true );
12957
12958					// Keep references to cloned scripts for later restoration
12959					if ( hasScripts ) {
12960
12961						// Support: Android <=4.0 only, PhantomJS 1 only
12962						// push.apply(_, arraylike) throws on ancient WebKit
12963						jQuery.merge( scripts, getAll( node, "script" ) );
12964					}
12965				}
12966
12967				callback.call( collection[ i ], node, i );
12968			}
12969
12970			if ( hasScripts ) {
12971				doc = scripts[ scripts.length - 1 ].ownerDocument;
12972
12973				// Reenable scripts
12974				jQuery.map( scripts, restoreScript );
12975
12976				// Evaluate executable scripts on first document insertion
12977				for ( i = 0; i < hasScripts; i++ ) {
12978					node = scripts[ i ];
12979					if ( rscriptType.test( node.type || "" ) &&
12980						!dataPriv.access( node, "globalEval" ) &&
12981						jQuery.contains( doc, node ) ) {
12982
12983						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
12984
12985							// Optional AJAX dependency, but won't run scripts if not present
12986							if ( jQuery._evalUrl && !node.noModule ) {
12987								jQuery._evalUrl( node.src, {
12988									nonce: node.nonce || node.getAttribute( "nonce" )
12989								}, doc );
12990							}
12991						} else {
12992							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
12993						}
12994					}
12995				}
12996			}
12997		}
12998	}
12999
13000	return collection;
13001}
13002
13003function remove( elem, selector, keepData ) {
13004	var node,
13005		nodes = selector ? jQuery.filter( selector, elem ) : elem,
13006		i = 0;
13007
13008	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
13009		if ( !keepData && node.nodeType === 1 ) {
13010			jQuery.cleanData( getAll( node ) );
13011		}
13012
13013		if ( node.parentNode ) {
13014			if ( keepData && isAttached( node ) ) {
13015				setGlobalEval( getAll( node, "script" ) );
13016			}
13017			node.parentNode.removeChild( node );
13018		}
13019	}
13020
13021	return elem;
13022}
13023
13024jQuery.extend( {
13025	htmlPrefilter: function( html ) {
13026		return html;
13027	},
13028
13029	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
13030		var i, l, srcElements, destElements,
13031			clone = elem.cloneNode( true ),
13032			inPage = isAttached( elem );
13033
13034		// Fix IE cloning issues
13035		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
13036				!jQuery.isXMLDoc( elem ) ) {
13037
13038			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
13039			destElements = getAll( clone );
13040			srcElements = getAll( elem );
13041
13042			for ( i = 0, l = srcElements.length; i < l; i++ ) {
13043				fixInput( srcElements[ i ], destElements[ i ] );
13044			}
13045		}
13046
13047		// Copy the events from the original to the clone
13048		if ( dataAndEvents ) {
13049			if ( deepDataAndEvents ) {
13050				srcElements = srcElements || getAll( elem );
13051				destElements = destElements || getAll( clone );
13052
13053				for ( i = 0, l = srcElements.length; i < l; i++ ) {
13054					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
13055				}
13056			} else {
13057				cloneCopyEvent( elem, clone );
13058			}
13059		}
13060
13061		// Preserve script evaluation history
13062		destElements = getAll( clone, "script" );
13063		if ( destElements.length > 0 ) {
13064			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
13065		}
13066
13067		// Return the cloned set
13068		return clone;
13069	},
13070
13071	cleanData: function( elems ) {
13072		var data, elem, type,
13073			special = jQuery.event.special,
13074			i = 0;
13075
13076		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
13077			if ( acceptData( elem ) ) {
13078				if ( ( data = elem[ dataPriv.expando ] ) ) {
13079					if ( data.events ) {
13080						for ( type in data.events ) {
13081							if ( special[ type ] ) {
13082								jQuery.event.remove( elem, type );
13083
13084							// This is a shortcut to avoid jQuery.event.remove's overhead
13085							} else {
13086								jQuery.removeEvent( elem, type, data.handle );
13087							}
13088						}
13089					}
13090
13091					// Support: Chrome <=35 - 45+
13092					// Assign undefined instead of using delete, see Data#remove
13093					elem[ dataPriv.expando ] = undefined;
13094				}
13095				if ( elem[ dataUser.expando ] ) {
13096
13097					// Support: Chrome <=35 - 45+
13098					// Assign undefined instead of using delete, see Data#remove
13099					elem[ dataUser.expando ] = undefined;
13100				}
13101			}
13102		}
13103	}
13104} );
13105
13106jQuery.fn.extend( {
13107	detach: function( selector ) {
13108		return remove( this, selector, true );
13109	},
13110
13111	remove: function( selector ) {
13112		return remove( this, selector );
13113	},
13114
13115	text: function( value ) {
13116		return access( this, function( value ) {
13117			return value === undefined ?
13118				jQuery.text( this ) :
13119				this.empty().each( function() {
13120					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13121						this.textContent = value;
13122					}
13123				} );
13124		}, null, value, arguments.length );
13125	},
13126
13127	append: function() {
13128		return domManip( this, arguments, function( elem ) {
13129			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13130				var target = manipulationTarget( this, elem );
13131				target.appendChild( elem );
13132			}
13133		} );
13134	},
13135
13136	prepend: function() {
13137		return domManip( this, arguments, function( elem ) {
13138			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13139				var target = manipulationTarget( this, elem );
13140				target.insertBefore( elem, target.firstChild );
13141			}
13142		} );
13143	},
13144
13145	before: function() {
13146		return domManip( this, arguments, function( elem ) {
13147			if ( this.parentNode ) {
13148				this.parentNode.insertBefore( elem, this );
13149			}
13150		} );
13151	},
13152
13153	after: function() {
13154		return domManip( this, arguments, function( elem ) {
13155			if ( this.parentNode ) {
13156				this.parentNode.insertBefore( elem, this.nextSibling );
13157			}
13158		} );
13159	},
13160
13161	empty: function() {
13162		var elem,
13163			i = 0;
13164
13165		for ( ; ( elem = this[ i ] ) != null; i++ ) {
13166			if ( elem.nodeType === 1 ) {
13167
13168				// Prevent memory leaks
13169				jQuery.cleanData( getAll( elem, false ) );
13170
13171				// Remove any remaining nodes
13172				elem.textContent = "";
13173			}
13174		}
13175
13176		return this;
13177	},
13178
13179	clone: function( dataAndEvents, deepDataAndEvents ) {
13180		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
13181		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
13182
13183		return this.map( function() {
13184			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
13185		} );
13186	},
13187
13188	html: function( value ) {
13189		return access( this, function( value ) {
13190			var elem = this[ 0 ] || {},
13191				i = 0,
13192				l = this.length;
13193
13194			if ( value === undefined && elem.nodeType === 1 ) {
13195				return elem.innerHTML;
13196			}
13197
13198			// See if we can take a shortcut and just use innerHTML
13199			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
13200				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
13201
13202				value = jQuery.htmlPrefilter( value );
13203
13204				try {
13205					for ( ; i < l; i++ ) {
13206						elem = this[ i ] || {};
13207
13208						// Remove element nodes and prevent memory leaks
13209						if ( elem.nodeType === 1 ) {
13210							jQuery.cleanData( getAll( elem, false ) );
13211							elem.innerHTML = value;
13212						}
13213					}
13214
13215					elem = 0;
13216
13217				// If using innerHTML throws an exception, use the fallback method
13218				} catch ( e ) {}
13219			}
13220
13221			if ( elem ) {
13222				this.empty().append( value );
13223			}
13224		}, null, value, arguments.length );
13225	},
13226
13227	replaceWith: function() {
13228		var ignored = [];
13229
13230		// Make the changes, replacing each non-ignored context element with the new content
13231		return domManip( this, arguments, function( elem ) {
13232			var parent = this.parentNode;
13233
13234			if ( jQuery.inArray( this, ignored ) < 0 ) {
13235				jQuery.cleanData( getAll( this ) );
13236				if ( parent ) {
13237					parent.replaceChild( elem, this );
13238				}
13239			}
13240
13241		// Force callback invocation
13242		}, ignored );
13243	}
13244} );
13245
13246jQuery.each( {
13247	appendTo: "append",
13248	prependTo: "prepend",
13249	insertBefore: "before",
13250	insertAfter: "after",
13251	replaceAll: "replaceWith"
13252}, function( name, original ) {
13253	jQuery.fn[ name ] = function( selector ) {
13254		var elems,
13255			ret = [],
13256			insert = jQuery( selector ),
13257			last = insert.length - 1,
13258			i = 0;
13259
13260		for ( ; i <= last; i++ ) {
13261			elems = i === last ? this : this.clone( true );
13262			jQuery( insert[ i ] )[ original ]( elems );
13263
13264			// Support: Android <=4.0 only, PhantomJS 1 only
13265			// .get() because push.apply(_, arraylike) throws on ancient WebKit
13266			push.apply( ret, elems.get() );
13267		}
13268
13269		return this.pushStack( ret );
13270	};
13271} );
13272var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
13273
13274var getStyles = function( elem ) {
13275
13276		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
13277		// IE throws on elements created in popups
13278		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
13279		var view = elem.ownerDocument.defaultView;
13280
13281		if ( !view || !view.opener ) {
13282			view = window;
13283		}
13284
13285		return view.getComputedStyle( elem );
13286	};
13287
13288var swap = function( elem, options, callback ) {
13289	var ret, name,
13290		old = {};
13291
13292	// Remember the old values, and insert the new ones
13293	for ( name in options ) {
13294		old[ name ] = elem.style[ name ];
13295		elem.style[ name ] = options[ name ];
13296	}
13297
13298	ret = callback.call( elem );
13299
13300	// Revert the old values
13301	for ( name in options ) {
13302		elem.style[ name ] = old[ name ];
13303	}
13304
13305	return ret;
13306};
13307
13308
13309var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
13310
13311
13312
13313( function() {
13314
13315	// Executing both pixelPosition & boxSizingReliable tests require only one layout
13316	// so they're executed at the same time to save the second computation.
13317	function computeStyleTests() {
13318
13319		// This is a singleton, we need to execute it only once
13320		if ( !div ) {
13321			return;
13322		}
13323
13324		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
13325			"margin-top:1px;padding:0;border:0";
13326		div.style.cssText =
13327			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
13328			"margin:auto;border:1px;padding:1px;" +
13329			"width:60%;top:1%";
13330		documentElement.appendChild( container ).appendChild( div );
13331
13332		var divStyle = window.getComputedStyle( div );
13333		pixelPositionVal = divStyle.top !== "1%";
13334
13335		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
13336		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
13337
13338		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
13339		// Some styles come back with percentage values, even though they shouldn't
13340		div.style.right = "60%";
13341		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
13342
13343		// Support: IE 9 - 11 only
13344		// Detect misreporting of content dimensions for box-sizing:border-box elements
13345		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
13346
13347		// Support: IE 9 only
13348		// Detect overflow:scroll screwiness (gh-3699)
13349		// Support: Chrome <=64
13350		// Don't get tricked when zoom affects offsetWidth (gh-4029)
13351		div.style.position = "absolute";
13352		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
13353
13354		documentElement.removeChild( container );
13355
13356		// Nullify the div so it wouldn't be stored in the memory and
13357		// it will also be a sign that checks already performed
13358		div = null;
13359	}
13360
13361	function roundPixelMeasures( measure ) {
13362		return Math.round( parseFloat( measure ) );
13363	}
13364
13365	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
13366		reliableTrDimensionsVal, reliableMarginLeftVal,
13367		container = document.createElement( "div" ),
13368		div = document.createElement( "div" );
13369
13370	// Finish early in limited (non-browser) environments
13371	if ( !div.style ) {
13372		return;
13373	}
13374
13375	// Support: IE <=9 - 11 only
13376	// Style of cloned element affects source element cloned (#8908)
13377	div.style.backgroundClip = "content-box";
13378	div.cloneNode( true ).style.backgroundClip = "";
13379	support.clearCloneStyle = div.style.backgroundClip === "content-box";
13380
13381	jQuery.extend( support, {
13382		boxSizingReliable: function() {
13383			computeStyleTests();
13384			return boxSizingReliableVal;
13385		},
13386		pixelBoxStyles: function() {
13387			computeStyleTests();
13388			return pixelBoxStylesVal;
13389		},
13390		pixelPosition: function() {
13391			computeStyleTests();
13392			return pixelPositionVal;
13393		},
13394		reliableMarginLeft: function() {
13395			computeStyleTests();
13396			return reliableMarginLeftVal;
13397		},
13398		scrollboxSize: function() {
13399			computeStyleTests();
13400			return scrollboxSizeVal;
13401		},
13402
13403		// Support: IE 9 - 11+, Edge 15 - 18+
13404		// IE/Edge misreport `getComputedStyle` of table rows with width/height
13405		// set in CSS while `offset*` properties report correct values.
13406		// Behavior in IE 9 is more subtle than in newer versions & it passes
13407		// some versions of this test; make sure not to make it pass there!
13408		//
13409		// Support: Firefox 70+
13410		// Only Firefox includes border widths
13411		// in computed dimensions. (gh-4529)
13412		reliableTrDimensions: function() {
13413			var table, tr, trChild, trStyle;
13414			if ( reliableTrDimensionsVal == null ) {
13415				table = document.createElement( "table" );
13416				tr = document.createElement( "tr" );
13417				trChild = document.createElement( "div" );
13418
13419				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
13420				tr.style.cssText = "border:1px solid";
13421
13422				// Support: Chrome 86+
13423				// Height set through cssText does not get applied.
13424				// Computed height then comes back as 0.
13425				tr.style.height = "1px";
13426				trChild.style.height = "9px";
13427
13428				// Support: Android 8 Chrome 86+
13429				// In our bodyBackground.html iframe,
13430				// display for all div elements is set to "inline",
13431				// which causes a problem only in Android 8 Chrome 86.
13432				// Ensuring the div is display: block
13433				// gets around this issue.
13434				trChild.style.display = "block";
13435
13436				documentElement
13437					.appendChild( table )
13438					.appendChild( tr )
13439					.appendChild( trChild );
13440
13441				trStyle = window.getComputedStyle( tr );
13442				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
13443					parseInt( trStyle.borderTopWidth, 10 ) +
13444					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
13445
13446				documentElement.removeChild( table );
13447			}
13448			return reliableTrDimensionsVal;
13449		}
13450	} );
13451} )();
13452
13453
13454function curCSS( elem, name, computed ) {
13455	var width, minWidth, maxWidth, ret,
13456
13457		// Support: Firefox 51+
13458		// Retrieving style before computed somehow
13459		// fixes an issue with getting wrong values
13460		// on detached elements
13461		style = elem.style;
13462
13463	computed = computed || getStyles( elem );
13464
13465	// getPropertyValue is needed for:
13466	//   .css('filter') (IE 9 only, #12537)
13467	//   .css('--customProperty) (#3144)
13468	if ( computed ) {
13469		ret = computed.getPropertyValue( name ) || computed[ name ];
13470
13471		if ( ret === "" && !isAttached( elem ) ) {
13472			ret = jQuery.style( elem, name );
13473		}
13474
13475		// A tribute to the "awesome hack by Dean Edwards"
13476		// Android Browser returns percentage for some values,
13477		// but width seems to be reliably pixels.
13478		// This is against the CSSOM draft spec:
13479		// https://drafts.csswg.org/cssom/#resolved-values
13480		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
13481
13482			// Remember the original values
13483			width = style.width;
13484			minWidth = style.minWidth;
13485			maxWidth = style.maxWidth;
13486
13487			// Put in the new values to get a computed value out
13488			style.minWidth = style.maxWidth = style.width = ret;
13489			ret = computed.width;
13490
13491			// Revert the changed values
13492			style.width = width;
13493			style.minWidth = minWidth;
13494			style.maxWidth = maxWidth;
13495		}
13496	}
13497
13498	return ret !== undefined ?
13499
13500		// Support: IE <=9 - 11 only
13501		// IE returns zIndex value as an integer.
13502		ret + "" :
13503		ret;
13504}
13505
13506
13507function addGetHookIf( conditionFn, hookFn ) {
13508
13509	// Define the hook, we'll check on the first run if it's really needed.
13510	return {
13511		get: function() {
13512			if ( conditionFn() ) {
13513
13514				// Hook not needed (or it's not possible to use it due
13515				// to missing dependency), remove it.
13516				delete this.get;
13517				return;
13518			}
13519
13520			// Hook needed; redefine it so that the support test is not executed again.
13521			return ( this.get = hookFn ).apply( this, arguments );
13522		}
13523	};
13524}
13525
13526
13527var cssPrefixes = [ "Webkit", "Moz", "ms" ],
13528	emptyStyle = document.createElement( "div" ).style,
13529	vendorProps = {};
13530
13531// Return a vendor-prefixed property or undefined
13532function vendorPropName( name ) {
13533
13534	// Check for vendor prefixed names
13535	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
13536		i = cssPrefixes.length;
13537
13538	while ( i-- ) {
13539		name = cssPrefixes[ i ] + capName;
13540		if ( name in emptyStyle ) {
13541			return name;
13542		}
13543	}
13544}
13545
13546// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
13547function finalPropName( name ) {
13548	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
13549
13550	if ( final ) {
13551		return final;
13552	}
13553	if ( name in emptyStyle ) {
13554		return name;
13555	}
13556	return vendorProps[ name ] = vendorPropName( name ) || name;
13557}
13558
13559
13560var
13561
13562	// Swappable if display is none or starts with table
13563	// except "table", "table-cell", or "table-caption"
13564	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
13565	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
13566	rcustomProp = /^--/,
13567	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
13568	cssNormalTransform = {
13569		letterSpacing: "0",
13570		fontWeight: "400"
13571	};
13572
13573function setPositiveNumber( _elem, value, subtract ) {
13574
13575	// Any relative (+/-) values have already been
13576	// normalized at this point
13577	var matches = rcssNum.exec( value );
13578	return matches ?
13579
13580		// Guard against undefined "subtract", e.g., when used as in cssHooks
13581		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
13582		value;
13583}
13584
13585function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
13586	var i = dimension === "width" ? 1 : 0,
13587		extra = 0,
13588		delta = 0;
13589
13590	// Adjustment may not be necessary
13591	if ( box === ( isBorderBox ? "border" : "content" ) ) {
13592		return 0;
13593	}
13594
13595	for ( ; i < 4; i += 2 ) {
13596
13597		// Both box models exclude margin
13598		if ( box === "margin" ) {
13599			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
13600		}
13601
13602		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
13603		if ( !isBorderBox ) {
13604
13605			// Add padding
13606			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
13607
13608			// For "border" or "margin", add border
13609			if ( box !== "padding" ) {
13610				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
13611
13612			// But still keep track of it otherwise
13613			} else {
13614				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
13615			}
13616
13617		// If we get here with a border-box (content + padding + border), we're seeking "content" or
13618		// "padding" or "margin"
13619		} else {
13620
13621			// For "content", subtract padding
13622			if ( box === "content" ) {
13623				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
13624			}
13625
13626			// For "content" or "padding", subtract border
13627			if ( box !== "margin" ) {
13628				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
13629			}
13630		}
13631	}
13632
13633	// Account for positive content-box scroll gutter when requested by providing computedVal
13634	if ( !isBorderBox && computedVal >= 0 ) {
13635
13636		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
13637		// Assuming integer scroll gutter, subtract the rest and round down
13638		delta += Math.max( 0, Math.ceil(
13639			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
13640			computedVal -
13641			delta -
13642			extra -
13643			0.5
13644
13645		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
13646		// Use an explicit zero to avoid NaN (gh-3964)
13647		) ) || 0;
13648	}
13649
13650	return delta;
13651}
13652
13653function getWidthOrHeight( elem, dimension, extra ) {
13654
13655	// Start with computed style
13656	var styles = getStyles( elem ),
13657
13658		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
13659		// Fake content-box until we know it's needed to know the true value.
13660		boxSizingNeeded = !support.boxSizingReliable() || extra,
13661		isBorderBox = boxSizingNeeded &&
13662			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
13663		valueIsBorderBox = isBorderBox,
13664
13665		val = curCSS( elem, dimension, styles ),
13666		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
13667
13668	// Support: Firefox <=54
13669	// Return a confounding non-pixel value or feign ignorance, as appropriate.
13670	if ( rnumnonpx.test( val ) ) {
13671		if ( !extra ) {
13672			return val;
13673		}
13674		val = "auto";
13675	}
13676
13677
13678	// Support: IE 9 - 11 only
13679	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
13680	// In those cases, the computed value can be trusted to be border-box.
13681	if ( ( !support.boxSizingReliable() && isBorderBox ||
13682
13683		// Support: IE 10 - 11+, Edge 15 - 18+
13684		// IE/Edge misreport `getComputedStyle` of table rows with width/height
13685		// set in CSS while `offset*` properties report correct values.
13686		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
13687		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
13688
13689		// Fall back to offsetWidth/offsetHeight when value is "auto"
13690		// This happens for inline elements with no explicit setting (gh-3571)
13691		val === "auto" ||
13692
13693		// Support: Android <=4.1 - 4.3 only
13694		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
13695		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
13696
13697		// Make sure the element is visible & connected
13698		elem.getClientRects().length ) {
13699
13700		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
13701
13702		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
13703		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
13704		// retrieved value as a content box dimension.
13705		valueIsBorderBox = offsetProp in elem;
13706		if ( valueIsBorderBox ) {
13707			val = elem[ offsetProp ];
13708		}
13709	}
13710
13711	// Normalize "" and auto
13712	val = parseFloat( val ) || 0;
13713
13714	// Adjust for the element's box model
13715	return ( val +
13716		boxModelAdjustment(
13717			elem,
13718			dimension,
13719			extra || ( isBorderBox ? "border" : "content" ),
13720			valueIsBorderBox,
13721			styles,
13722
13723			// Provide the current computed size to request scroll gutter calculation (gh-3589)
13724			val
13725		)
13726	) + "px";
13727}
13728
13729jQuery.extend( {
13730
13731	// Add in style property hooks for overriding the default
13732	// behavior of getting and setting a style property
13733	cssHooks: {
13734		opacity: {
13735			get: function( elem, computed ) {
13736				if ( computed ) {
13737
13738					// We should always get a number back from opacity
13739					var ret = curCSS( elem, "opacity" );
13740					return ret === "" ? "1" : ret;
13741				}
13742			}
13743		}
13744	},
13745
13746	// Don't automatically add "px" to these possibly-unitless properties
13747	cssNumber: {
13748		"animationIterationCount": true,
13749		"columnCount": true,
13750		"fillOpacity": true,
13751		"flexGrow": true,
13752		"flexShrink": true,
13753		"fontWeight": true,
13754		"gridArea": true,
13755		"gridColumn": true,
13756		"gridColumnEnd": true,
13757		"gridColumnStart": true,
13758		"gridRow": true,
13759		"gridRowEnd": true,
13760		"gridRowStart": true,
13761		"lineHeight": true,
13762		"opacity": true,
13763		"order": true,
13764		"orphans": true,
13765		"widows": true,
13766		"zIndex": true,
13767		"zoom": true
13768	},
13769
13770	// Add in properties whose names you wish to fix before
13771	// setting or getting the value
13772	cssProps: {},
13773
13774	// Get and set the style property on a DOM Node
13775	style: function( elem, name, value, extra ) {
13776
13777		// Don't set styles on text and comment nodes
13778		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
13779			return;
13780		}
13781
13782		// Make sure that we're working with the right name
13783		var ret, type, hooks,
13784			origName = camelCase( name ),
13785			isCustomProp = rcustomProp.test( name ),
13786			style = elem.style;
13787
13788		// Make sure that we're working with the right name. We don't
13789		// want to query the value if it is a CSS custom property
13790		// since they are user-defined.
13791		if ( !isCustomProp ) {
13792			name = finalPropName( origName );
13793		}
13794
13795		// Gets hook for the prefixed version, then unprefixed version
13796		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
13797
13798		// Check if we're setting a value
13799		if ( value !== undefined ) {
13800			type = typeof value;
13801
13802			// Convert "+=" or "-=" to relative numbers (#7345)
13803			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
13804				value = adjustCSS( elem, name, ret );
13805
13806				// Fixes bug #9237
13807				type = "number";
13808			}
13809
13810			// Make sure that null and NaN values aren't set (#7116)
13811			if ( value == null || value !== value ) {
13812				return;
13813			}
13814
13815			// If a number was passed in, add the unit (except for certain CSS properties)
13816			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
13817			// "px" to a few hardcoded values.
13818			if ( type === "number" && !isCustomProp ) {
13819				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
13820			}
13821
13822			// background-* props affect original clone's values
13823			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
13824				style[ name ] = "inherit";
13825			}
13826
13827			// If a hook was provided, use that value, otherwise just set the specified value
13828			if ( !hooks || !( "set" in hooks ) ||
13829				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
13830
13831				if ( isCustomProp ) {
13832					style.setProperty( name, value );
13833				} else {
13834					style[ name ] = value;
13835				}
13836			}
13837
13838		} else {
13839
13840			// If a hook was provided get the non-computed value from there
13841			if ( hooks && "get" in hooks &&
13842				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
13843
13844				return ret;
13845			}
13846
13847			// Otherwise just get the value from the style object
13848			return style[ name ];
13849		}
13850	},
13851
13852	css: function( elem, name, extra, styles ) {
13853		var val, num, hooks,
13854			origName = camelCase( name ),
13855			isCustomProp = rcustomProp.test( name );
13856
13857		// Make sure that we're working with the right name. We don't
13858		// want to modify the value if it is a CSS custom property
13859		// since they are user-defined.
13860		if ( !isCustomProp ) {
13861			name = finalPropName( origName );
13862		}
13863
13864		// Try prefixed name followed by the unprefixed name
13865		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
13866
13867		// If a hook was provided get the computed value from there
13868		if ( hooks && "get" in hooks ) {
13869			val = hooks.get( elem, true, extra );
13870		}
13871
13872		// Otherwise, if a way to get the computed value exists, use that
13873		if ( val === undefined ) {
13874			val = curCSS( elem, name, styles );
13875		}
13876
13877		// Convert "normal" to computed value
13878		if ( val === "normal" && name in cssNormalTransform ) {
13879			val = cssNormalTransform[ name ];
13880		}
13881
13882		// Make numeric if forced or a qualifier was provided and val looks numeric
13883		if ( extra === "" || extra ) {
13884			num = parseFloat( val );
13885			return extra === true || isFinite( num ) ? num || 0 : val;
13886		}
13887
13888		return val;
13889	}
13890} );
13891
13892jQuery.each( [ "height", "width" ], function( _i, dimension ) {
13893	jQuery.cssHooks[ dimension ] = {
13894		get: function( elem, computed, extra ) {
13895			if ( computed ) {
13896
13897				// Certain elements can have dimension info if we invisibly show them
13898				// but it must have a current display style that would benefit
13899				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
13900
13901					// Support: Safari 8+
13902					// Table columns in Safari have non-zero offsetWidth & zero
13903					// getBoundingClientRect().width unless display is changed.
13904					// Support: IE <=11 only
13905					// Running getBoundingClientRect on a disconnected node
13906					// in IE throws an error.
13907					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
13908					swap( elem, cssShow, function() {
13909						return getWidthOrHeight( elem, dimension, extra );
13910					} ) :
13911					getWidthOrHeight( elem, dimension, extra );
13912			}
13913		},
13914
13915		set: function( elem, value, extra ) {
13916			var matches,
13917				styles = getStyles( elem ),
13918
13919				// Only read styles.position if the test has a chance to fail
13920				// to avoid forcing a reflow.
13921				scrollboxSizeBuggy = !support.scrollboxSize() &&
13922					styles.position === "absolute",
13923
13924				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
13925				boxSizingNeeded = scrollboxSizeBuggy || extra,
13926				isBorderBox = boxSizingNeeded &&
13927					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
13928				subtract = extra ?
13929					boxModelAdjustment(
13930						elem,
13931						dimension,
13932						extra,
13933						isBorderBox,
13934						styles
13935					) :
13936					0;
13937
13938			// Account for unreliable border-box dimensions by comparing offset* to computed and
13939			// faking a content-box to get border and padding (gh-3699)
13940			if ( isBorderBox && scrollboxSizeBuggy ) {
13941				subtract -= Math.ceil(
13942					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
13943					parseFloat( styles[ dimension ] ) -
13944					boxModelAdjustment( elem, dimension, "border", false, styles ) -
13945					0.5
13946				);
13947			}
13948
13949			// Convert to pixels if value adjustment is needed
13950			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
13951				( matches[ 3 ] || "px" ) !== "px" ) {
13952
13953				elem.style[ dimension ] = value;
13954				value = jQuery.css( elem, dimension );
13955			}
13956
13957			return setPositiveNumber( elem, value, subtract );
13958		}
13959	};
13960} );
13961
13962jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
13963	function( elem, computed ) {
13964		if ( computed ) {
13965			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
13966				elem.getBoundingClientRect().left -
13967					swap( elem, { marginLeft: 0 }, function() {
13968						return elem.getBoundingClientRect().left;
13969					} )
13970			) + "px";
13971		}
13972	}
13973);
13974
13975// These hooks are used by animate to expand properties
13976jQuery.each( {
13977	margin: "",
13978	padding: "",
13979	border: "Width"
13980}, function( prefix, suffix ) {
13981	jQuery.cssHooks[ prefix + suffix ] = {
13982		expand: function( value ) {
13983			var i = 0,
13984				expanded = {},
13985
13986				// Assumes a single number if not a string
13987				parts = typeof value === "string" ? value.split( " " ) : [ value ];
13988
13989			for ( ; i < 4; i++ ) {
13990				expanded[ prefix + cssExpand[ i ] + suffix ] =
13991					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
13992			}
13993
13994			return expanded;
13995		}
13996	};
13997
13998	if ( prefix !== "margin" ) {
13999		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
14000	}
14001} );
14002
14003jQuery.fn.extend( {
14004	css: function( name, value ) {
14005		return access( this, function( elem, name, value ) {
14006			var styles, len,
14007				map = {},
14008				i = 0;
14009
14010			if ( Array.isArray( name ) ) {
14011				styles = getStyles( elem );
14012				len = name.length;
14013
14014				for ( ; i < len; i++ ) {
14015					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
14016				}
14017
14018				return map;
14019			}
14020
14021			return value !== undefined ?
14022				jQuery.style( elem, name, value ) :
14023				jQuery.css( elem, name );
14024		}, name, value, arguments.length > 1 );
14025	}
14026} );
14027
14028
14029function Tween( elem, options, prop, end, easing ) {
14030	return new Tween.prototype.init( elem, options, prop, end, easing );
14031}
14032jQuery.Tween = Tween;
14033
14034Tween.prototype = {
14035	constructor: Tween,
14036	init: function( elem, options, prop, end, easing, unit ) {
14037		this.elem = elem;
14038		this.prop = prop;
14039		this.easing = easing || jQuery.easing._default;
14040		this.options = options;
14041		this.start = this.now = this.cur();
14042		this.end = end;
14043		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
14044	},
14045	cur: function() {
14046		var hooks = Tween.propHooks[ this.prop ];
14047
14048		return hooks && hooks.get ?
14049			hooks.get( this ) :
14050			Tween.propHooks._default.get( this );
14051	},
14052	run: function( percent ) {
14053		var eased,
14054			hooks = Tween.propHooks[ this.prop ];
14055
14056		if ( this.options.duration ) {
14057			this.pos = eased = jQuery.easing[ this.easing ](
14058				percent, this.options.duration * percent, 0, 1, this.options.duration
14059			);
14060		} else {
14061			this.pos = eased = percent;
14062		}
14063		this.now = ( this.end - this.start ) * eased + this.start;
14064
14065		if ( this.options.step ) {
14066			this.options.step.call( this.elem, this.now, this );
14067		}
14068
14069		if ( hooks && hooks.set ) {
14070			hooks.set( this );
14071		} else {
14072			Tween.propHooks._default.set( this );
14073		}
14074		return this;
14075	}
14076};
14077
14078Tween.prototype.init.prototype = Tween.prototype;
14079
14080Tween.propHooks = {
14081	_default: {
14082		get: function( tween ) {
14083			var result;
14084
14085			// Use a property on the element directly when it is not a DOM element,
14086			// or when there is no matching style property that exists.
14087			if ( tween.elem.nodeType !== 1 ||
14088				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
14089				return tween.elem[ tween.prop ];
14090			}
14091
14092			// Passing an empty string as a 3rd parameter to .css will automatically
14093			// attempt a parseFloat and fallback to a string if the parse fails.
14094			// Simple values such as "10px" are parsed to Float;
14095			// complex values such as "rotate(1rad)" are returned as-is.
14096			result = jQuery.css( tween.elem, tween.prop, "" );
14097
14098			// Empty strings, null, undefined and "auto" are converted to 0.
14099			return !result || result === "auto" ? 0 : result;
14100		},
14101		set: function( tween ) {
14102
14103			// Use step hook for back compat.
14104			// Use cssHook if its there.
14105			// Use .style if available and use plain properties where available.
14106			if ( jQuery.fx.step[ tween.prop ] ) {
14107				jQuery.fx.step[ tween.prop ]( tween );
14108			} else if ( tween.elem.nodeType === 1 && (
14109				jQuery.cssHooks[ tween.prop ] ||
14110					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
14111				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
14112			} else {
14113				tween.elem[ tween.prop ] = tween.now;
14114			}
14115		}
14116	}
14117};
14118
14119// Support: IE <=9 only
14120// Panic based approach to setting things on disconnected nodes
14121Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
14122	set: function( tween ) {
14123		if ( tween.elem.nodeType && tween.elem.parentNode ) {
14124			tween.elem[ tween.prop ] = tween.now;
14125		}
14126	}
14127};
14128
14129jQuery.easing = {
14130	linear: function( p ) {
14131		return p;
14132	},
14133	swing: function( p ) {
14134		return 0.5 - Math.cos( p * Math.PI ) / 2;
14135	},
14136	_default: "swing"
14137};
14138
14139jQuery.fx = Tween.prototype.init;
14140
14141// Back compat <1.8 extension point
14142jQuery.fx.step = {};
14143
14144
14145
14146
14147var
14148	fxNow, inProgress,
14149	rfxtypes = /^(?:toggle|show|hide)$/,
14150	rrun = /queueHooks$/;
14151
14152function schedule() {
14153	if ( inProgress ) {
14154		if ( document.hidden === false && window.requestAnimationFrame ) {
14155			window.requestAnimationFrame( schedule );
14156		} else {
14157			window.setTimeout( schedule, jQuery.fx.interval );
14158		}
14159
14160		jQuery.fx.tick();
14161	}
14162}
14163
14164// Animations created synchronously will run synchronously
14165function createFxNow() {
14166	window.setTimeout( function() {
14167		fxNow = undefined;
14168	} );
14169	return ( fxNow = Date.now() );
14170}
14171
14172// Generate parameters to create a standard animation
14173function genFx( type, includeWidth ) {
14174	var which,
14175		i = 0,
14176		attrs = { height: type };
14177
14178	// If we include width, step value is 1 to do all cssExpand values,
14179	// otherwise step value is 2 to skip over Left and Right
14180	includeWidth = includeWidth ? 1 : 0;
14181	for ( ; i < 4; i += 2 - includeWidth ) {
14182		which = cssExpand[ i ];
14183		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
14184	}
14185
14186	if ( includeWidth ) {
14187		attrs.opacity = attrs.width = type;
14188	}
14189
14190	return attrs;
14191}
14192
14193function createTween( value, prop, animation ) {
14194	var tween,
14195		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
14196		index = 0,
14197		length = collection.length;
14198	for ( ; index < length; index++ ) {
14199		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
14200
14201			// We're done with this property
14202			return tween;
14203		}
14204	}
14205}
14206
14207function defaultPrefilter( elem, props, opts ) {
14208	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
14209		isBox = "width" in props || "height" in props,
14210		anim = this,
14211		orig = {},
14212		style = elem.style,
14213		hidden = elem.nodeType && isHiddenWithinTree( elem ),
14214		dataShow = dataPriv.get( elem, "fxshow" );
14215
14216	// Queue-skipping animations hijack the fx hooks
14217	if ( !opts.queue ) {
14218		hooks = jQuery._queueHooks( elem, "fx" );
14219		if ( hooks.unqueued == null ) {
14220			hooks.unqueued = 0;
14221			oldfire = hooks.empty.fire;
14222			hooks.empty.fire = function() {
14223				if ( !hooks.unqueued ) {
14224					oldfire();
14225				}
14226			};
14227		}
14228		hooks.unqueued++;
14229
14230		anim.always( function() {
14231
14232			// Ensure the complete handler is called before this completes
14233			anim.always( function() {
14234				hooks.unqueued--;
14235				if ( !jQuery.queue( elem, "fx" ).length ) {
14236					hooks.empty.fire();
14237				}
14238			} );
14239		} );
14240	}
14241
14242	// Detect show/hide animations
14243	for ( prop in props ) {
14244		value = props[ prop ];
14245		if ( rfxtypes.test( value ) ) {
14246			delete props[ prop ];
14247			toggle = toggle || value === "toggle";
14248			if ( value === ( hidden ? "hide" : "show" ) ) {
14249
14250				// Pretend to be hidden if this is a "show" and
14251				// there is still data from a stopped show/hide
14252				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
14253					hidden = true;
14254
14255				// Ignore all other no-op show/hide data
14256				} else {
14257					continue;
14258				}
14259			}
14260			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
14261		}
14262	}
14263
14264	// Bail out if this is a no-op like .hide().hide()
14265	propTween = !jQuery.isEmptyObject( props );
14266	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
14267		return;
14268	}
14269
14270	// Restrict "overflow" and "display" styles during box animations
14271	if ( isBox && elem.nodeType === 1 ) {
14272
14273		// Support: IE <=9 - 11, Edge 12 - 15
14274		// Record all 3 overflow attributes because IE does not infer the shorthand
14275		// from identically-valued overflowX and overflowY and Edge just mirrors
14276		// the overflowX value there.
14277		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
14278
14279		// Identify a display type, preferring old show/hide data over the CSS cascade
14280		restoreDisplay = dataShow && dataShow.display;
14281		if ( restoreDisplay == null ) {
14282			restoreDisplay = dataPriv.get( elem, "display" );
14283		}
14284		display = jQuery.css( elem, "display" );
14285		if ( display === "none" ) {
14286			if ( restoreDisplay ) {
14287				display = restoreDisplay;
14288			} else {
14289
14290				// Get nonempty value(s) by temporarily forcing visibility
14291				showHide( [ elem ], true );
14292				restoreDisplay = elem.style.display || restoreDisplay;
14293				display = jQuery.css( elem, "display" );
14294				showHide( [ elem ] );
14295			}
14296		}
14297
14298		// Animate inline elements as inline-block
14299		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
14300			if ( jQuery.css( elem, "float" ) === "none" ) {
14301
14302				// Restore the original display value at the end of pure show/hide animations
14303				if ( !propTween ) {
14304					anim.done( function() {
14305						style.display = restoreDisplay;
14306					} );
14307					if ( restoreDisplay == null ) {
14308						display = style.display;
14309						restoreDisplay = display === "none" ? "" : display;
14310					}
14311				}
14312				style.display = "inline-block";
14313			}
14314		}
14315	}
14316
14317	if ( opts.overflow ) {
14318		style.overflow = "hidden";
14319		anim.always( function() {
14320			style.overflow = opts.overflow[ 0 ];
14321			style.overflowX = opts.overflow[ 1 ];
14322			style.overflowY = opts.overflow[ 2 ];
14323		} );
14324	}
14325
14326	// Implement show/hide animations
14327	propTween = false;
14328	for ( prop in orig ) {
14329
14330		// General show/hide setup for this element animation
14331		if ( !propTween ) {
14332			if ( dataShow ) {
14333				if ( "hidden" in dataShow ) {
14334					hidden = dataShow.hidden;
14335				}
14336			} else {
14337				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
14338			}
14339
14340			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
14341			if ( toggle ) {
14342				dataShow.hidden = !hidden;
14343			}
14344
14345			// Show elements before animating them
14346			if ( hidden ) {
14347				showHide( [ elem ], true );
14348			}
14349
14350			/* eslint-disable no-loop-func */
14351
14352			anim.done( function() {
14353
14354				/* eslint-enable no-loop-func */
14355
14356				// The final step of a "hide" animation is actually hiding the element
14357				if ( !hidden ) {
14358					showHide( [ elem ] );
14359				}
14360				dataPriv.remove( elem, "fxshow" );
14361				for ( prop in orig ) {
14362					jQuery.style( elem, prop, orig[ prop ] );
14363				}
14364			} );
14365		}
14366
14367		// Per-property setup
14368		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
14369		if ( !( prop in dataShow ) ) {
14370			dataShow[ prop ] = propTween.start;
14371			if ( hidden ) {
14372				propTween.end = propTween.start;
14373				propTween.start = 0;
14374			}
14375		}
14376	}
14377}
14378
14379function propFilter( props, specialEasing ) {
14380	var index, name, easing, value, hooks;
14381
14382	// camelCase, specialEasing and expand cssHook pass
14383	for ( index in props ) {
14384		name = camelCase( index );
14385		easing = specialEasing[ name ];
14386		value = props[ index ];
14387		if ( Array.isArray( value ) ) {
14388			easing = value[ 1 ];
14389			value = props[ index ] = value[ 0 ];
14390		}
14391
14392		if ( index !== name ) {
14393			props[ name ] = value;
14394			delete props[ index ];
14395		}
14396
14397		hooks = jQuery.cssHooks[ name ];
14398		if ( hooks && "expand" in hooks ) {
14399			value = hooks.expand( value );
14400			delete props[ name ];
14401
14402			// Not quite $.extend, this won't overwrite existing keys.
14403			// Reusing 'index' because we have the correct "name"
14404			for ( index in value ) {
14405				if ( !( index in props ) ) {
14406					props[ index ] = value[ index ];
14407					specialEasing[ index ] = easing;
14408				}
14409			}
14410		} else {
14411			specialEasing[ name ] = easing;
14412		}
14413	}
14414}
14415
14416function Animation( elem, properties, options ) {
14417	var result,
14418		stopped,
14419		index = 0,
14420		length = Animation.prefilters.length,
14421		deferred = jQuery.Deferred().always( function() {
14422
14423			// Don't match elem in the :animated selector
14424			delete tick.elem;
14425		} ),
14426		tick = function() {
14427			if ( stopped ) {
14428				return false;
14429			}
14430			var currentTime = fxNow || createFxNow(),
14431				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
14432
14433				// Support: Android 2.3 only
14434				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
14435				temp = remaining / animation.duration || 0,
14436				percent = 1 - temp,
14437				index = 0,
14438				length = animation.tweens.length;
14439
14440			for ( ; index < length; index++ ) {
14441				animation.tweens[ index ].run( percent );
14442			}
14443
14444			deferred.notifyWith( elem, [ animation, percent, remaining ] );
14445
14446			// If there's more to do, yield
14447			if ( percent < 1 && length ) {
14448				return remaining;
14449			}
14450
14451			// If this was an empty animation, synthesize a final progress notification
14452			if ( !length ) {
14453				deferred.notifyWith( elem, [ animation, 1, 0 ] );
14454			}
14455
14456			// Resolve the animation and report its conclusion
14457			deferred.resolveWith( elem, [ animation ] );
14458			return false;
14459		},
14460		animation = deferred.promise( {
14461			elem: elem,
14462			props: jQuery.extend( {}, properties ),
14463			opts: jQuery.extend( true, {
14464				specialEasing: {},
14465				easing: jQuery.easing._default
14466			}, options ),
14467			originalProperties: properties,
14468			originalOptions: options,
14469			startTime: fxNow || createFxNow(),
14470			duration: options.duration,
14471			tweens: [],
14472			createTween: function( prop, end ) {
14473				var tween = jQuery.Tween( elem, animation.opts, prop, end,
14474					animation.opts.specialEasing[ prop ] || animation.opts.easing );
14475				animation.tweens.push( tween );
14476				return tween;
14477			},
14478			stop: function( gotoEnd ) {
14479				var index = 0,
14480
14481					// If we are going to the end, we want to run all the tweens
14482					// otherwise we skip this part
14483					length = gotoEnd ? animation.tweens.length : 0;
14484				if ( stopped ) {
14485					return this;
14486				}
14487				stopped = true;
14488				for ( ; index < length; index++ ) {
14489					animation.tweens[ index ].run( 1 );
14490				}
14491
14492				// Resolve when we played the last frame; otherwise, reject
14493				if ( gotoEnd ) {
14494					deferred.notifyWith( elem, [ animation, 1, 0 ] );
14495					deferred.resolveWith( elem, [ animation, gotoEnd ] );
14496				} else {
14497					deferred.rejectWith( elem, [ animation, gotoEnd ] );
14498				}
14499				return this;
14500			}
14501		} ),
14502		props = animation.props;
14503
14504	propFilter( props, animation.opts.specialEasing );
14505
14506	for ( ; index < length; index++ ) {
14507		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
14508		if ( result ) {
14509			if ( isFunction( result.stop ) ) {
14510				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
14511					result.stop.bind( result );
14512			}
14513			return result;
14514		}
14515	}
14516
14517	jQuery.map( props, createTween, animation );
14518
14519	if ( isFunction( animation.opts.start ) ) {
14520		animation.opts.start.call( elem, animation );
14521	}
14522
14523	// Attach callbacks from options
14524	animation
14525		.progress( animation.opts.progress )
14526		.done( animation.opts.done, animation.opts.complete )
14527		.fail( animation.opts.fail )
14528		.always( animation.opts.always );
14529
14530	jQuery.fx.timer(
14531		jQuery.extend( tick, {
14532			elem: elem,
14533			anim: animation,
14534			queue: animation.opts.queue
14535		} )
14536	);
14537
14538	return animation;
14539}
14540
14541jQuery.Animation = jQuery.extend( Animation, {
14542
14543	tweeners: {
14544		"*": [ function( prop, value ) {
14545			var tween = this.createTween( prop, value );
14546			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
14547			return tween;
14548		} ]
14549	},
14550
14551	tweener: function( props, callback ) {
14552		if ( isFunction( props ) ) {
14553			callback = props;
14554			props = [ "*" ];
14555		} else {
14556			props = props.match( rnothtmlwhite );
14557		}
14558
14559		var prop,
14560			index = 0,
14561			length = props.length;
14562
14563		for ( ; index < length; index++ ) {
14564			prop = props[ index ];
14565			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
14566			Animation.tweeners[ prop ].unshift( callback );
14567		}
14568	},
14569
14570	prefilters: [ defaultPrefilter ],
14571
14572	prefilter: function( callback, prepend ) {
14573		if ( prepend ) {
14574			Animation.prefilters.unshift( callback );
14575		} else {
14576			Animation.prefilters.push( callback );
14577		}
14578	}
14579} );
14580
14581jQuery.speed = function( speed, easing, fn ) {
14582	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
14583		complete: fn || !fn && easing ||
14584			isFunction( speed ) && speed,
14585		duration: speed,
14586		easing: fn && easing || easing && !isFunction( easing ) && easing
14587	};
14588
14589	// Go to the end state if fx are off
14590	if ( jQuery.fx.off ) {
14591		opt.duration = 0;
14592
14593	} else {
14594		if ( typeof opt.duration !== "number" ) {
14595			if ( opt.duration in jQuery.fx.speeds ) {
14596				opt.duration = jQuery.fx.speeds[ opt.duration ];
14597
14598			} else {
14599				opt.duration = jQuery.fx.speeds._default;
14600			}
14601		}
14602	}
14603
14604	// Normalize opt.queue - true/undefined/null -> "fx"
14605	if ( opt.queue == null || opt.queue === true ) {
14606		opt.queue = "fx";
14607	}
14608
14609	// Queueing
14610	opt.old = opt.complete;
14611
14612	opt.complete = function() {
14613		if ( isFunction( opt.old ) ) {
14614			opt.old.call( this );
14615		}
14616
14617		if ( opt.queue ) {
14618			jQuery.dequeue( this, opt.queue );
14619		}
14620	};
14621
14622	return opt;
14623};
14624
14625jQuery.fn.extend( {
14626	fadeTo: function( speed, to, easing, callback ) {
14627
14628		// Show any hidden elements after setting opacity to 0
14629		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
14630
14631			// Animate to the value specified
14632			.end().animate( { opacity: to }, speed, easing, callback );
14633	},
14634	animate: function( prop, speed, easing, callback ) {
14635		var empty = jQuery.isEmptyObject( prop ),
14636			optall = jQuery.speed( speed, easing, callback ),
14637			doAnimation = function() {
14638
14639				// Operate on a copy of prop so per-property easing won't be lost
14640				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
14641
14642				// Empty animations, or finishing resolves immediately
14643				if ( empty || dataPriv.get( this, "finish" ) ) {
14644					anim.stop( true );
14645				}
14646			};
14647
14648		doAnimation.finish = doAnimation;
14649
14650		return empty || optall.queue === false ?
14651			this.each( doAnimation ) :
14652			this.queue( optall.queue, doAnimation );
14653	},
14654	stop: function( type, clearQueue, gotoEnd ) {
14655		var stopQueue = function( hooks ) {
14656			var stop = hooks.stop;
14657			delete hooks.stop;
14658			stop( gotoEnd );
14659		};
14660
14661		if ( typeof type !== "string" ) {
14662			gotoEnd = clearQueue;
14663			clearQueue = type;
14664			type = undefined;
14665		}
14666		if ( clearQueue ) {
14667			this.queue( type || "fx", [] );
14668		}
14669
14670		return this.each( function() {
14671			var dequeue = true,
14672				index = type != null && type + "queueHooks",
14673				timers = jQuery.timers,
14674				data = dataPriv.get( this );
14675
14676			if ( index ) {
14677				if ( data[ index ] && data[ index ].stop ) {
14678					stopQueue( data[ index ] );
14679				}
14680			} else {
14681				for ( index in data ) {
14682					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
14683						stopQueue( data[ index ] );
14684					}
14685				}
14686			}
14687
14688			for ( index = timers.length; index--; ) {
14689				if ( timers[ index ].elem === this &&
14690					( type == null || timers[ index ].queue === type ) ) {
14691
14692					timers[ index ].anim.stop( gotoEnd );
14693					dequeue = false;
14694					timers.splice( index, 1 );
14695				}
14696			}
14697
14698			// Start the next in the queue if the last step wasn't forced.
14699			// Timers currently will call their complete callbacks, which
14700			// will dequeue but only if they were gotoEnd.
14701			if ( dequeue || !gotoEnd ) {
14702				jQuery.dequeue( this, type );
14703			}
14704		} );
14705	},
14706	finish: function( type ) {
14707		if ( type !== false ) {
14708			type = type || "fx";
14709		}
14710		return this.each( function() {
14711			var index,
14712				data = dataPriv.get( this ),
14713				queue = data[ type + "queue" ],
14714				hooks = data[ type + "queueHooks" ],
14715				timers = jQuery.timers,
14716				length = queue ? queue.length : 0;
14717
14718			// Enable finishing flag on private data
14719			data.finish = true;
14720
14721			// Empty the queue first
14722			jQuery.queue( this, type, [] );
14723
14724			if ( hooks && hooks.stop ) {
14725				hooks.stop.call( this, true );
14726			}
14727
14728			// Look for any active animations, and finish them
14729			for ( index = timers.length; index--; ) {
14730				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
14731					timers[ index ].anim.stop( true );
14732					timers.splice( index, 1 );
14733				}
14734			}
14735
14736			// Look for any animations in the old queue and finish them
14737			for ( index = 0; index < length; index++ ) {
14738				if ( queue[ index ] && queue[ index ].finish ) {
14739					queue[ index ].finish.call( this );
14740				}
14741			}
14742
14743			// Turn off finishing flag
14744			delete data.finish;
14745		} );
14746	}
14747} );
14748
14749jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
14750	var cssFn = jQuery.fn[ name ];
14751	jQuery.fn[ name ] = function( speed, easing, callback ) {
14752		return speed == null || typeof speed === "boolean" ?
14753			cssFn.apply( this, arguments ) :
14754			this.animate( genFx( name, true ), speed, easing, callback );
14755	};
14756} );
14757
14758// Generate shortcuts for custom animations
14759jQuery.each( {
14760	slideDown: genFx( "show" ),
14761	slideUp: genFx( "hide" ),
14762	slideToggle: genFx( "toggle" ),
14763	fadeIn: { opacity: "show" },
14764	fadeOut: { opacity: "hide" },
14765	fadeToggle: { opacity: "toggle" }
14766}, function( name, props ) {
14767	jQuery.fn[ name ] = function( speed, easing, callback ) {
14768		return this.animate( props, speed, easing, callback );
14769	};
14770} );
14771
14772jQuery.timers = [];
14773jQuery.fx.tick = function() {
14774	var timer,
14775		i = 0,
14776		timers = jQuery.timers;
14777
14778	fxNow = Date.now();
14779
14780	for ( ; i < timers.length; i++ ) {
14781		timer = timers[ i ];
14782
14783		// Run the timer and safely remove it when done (allowing for external removal)
14784		if ( !timer() && timers[ i ] === timer ) {
14785			timers.splice( i--, 1 );
14786		}
14787	}
14788
14789	if ( !timers.length ) {
14790		jQuery.fx.stop();
14791	}
14792	fxNow = undefined;
14793};
14794
14795jQuery.fx.timer = function( timer ) {
14796	jQuery.timers.push( timer );
14797	jQuery.fx.start();
14798};
14799
14800jQuery.fx.interval = 13;
14801jQuery.fx.start = function() {
14802	if ( inProgress ) {
14803		return;
14804	}
14805
14806	inProgress = true;
14807	schedule();
14808};
14809
14810jQuery.fx.stop = function() {
14811	inProgress = null;
14812};
14813
14814jQuery.fx.speeds = {
14815	slow: 600,
14816	fast: 200,
14817
14818	// Default speed
14819	_default: 400
14820};
14821
14822
14823// Based off of the plugin by Clint Helfers, with permission.
14824// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
14825jQuery.fn.delay = function( time, type ) {
14826	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
14827	type = type || "fx";
14828
14829	return this.queue( type, function( next, hooks ) {
14830		var timeout = window.setTimeout( next, time );
14831		hooks.stop = function() {
14832			window.clearTimeout( timeout );
14833		};
14834	} );
14835};
14836
14837
14838( function() {
14839	var input = document.createElement( "input" ),
14840		select = document.createElement( "select" ),
14841		opt = select.appendChild( document.createElement( "option" ) );
14842
14843	input.type = "checkbox";
14844
14845	// Support: Android <=4.3 only
14846	// Default value for a checkbox should be "on"
14847	support.checkOn = input.value !== "";
14848
14849	// Support: IE <=11 only
14850	// Must access selectedIndex to make default options select
14851	support.optSelected = opt.selected;
14852
14853	// Support: IE <=11 only
14854	// An input loses its value after becoming a radio
14855	input = document.createElement( "input" );
14856	input.value = "t";
14857	input.type = "radio";
14858	support.radioValue = input.value === "t";
14859} )();
14860
14861
14862var boolHook,
14863	attrHandle = jQuery.expr.attrHandle;
14864
14865jQuery.fn.extend( {
14866	attr: function( name, value ) {
14867		return access( this, jQuery.attr, name, value, arguments.length > 1 );
14868	},
14869
14870	removeAttr: function( name ) {
14871		return this.each( function() {
14872			jQuery.removeAttr( this, name );
14873		} );
14874	}
14875} );
14876
14877jQuery.extend( {
14878	attr: function( elem, name, value ) {
14879		var ret, hooks,
14880			nType = elem.nodeType;
14881
14882		// Don't get/set attributes on text, comment and attribute nodes
14883		if ( nType === 3 || nType === 8 || nType === 2 ) {
14884			return;
14885		}
14886
14887		// Fallback to prop when attributes are not supported
14888		if ( typeof elem.getAttribute === "undefined" ) {
14889			return jQuery.prop( elem, name, value );
14890		}
14891
14892		// Attribute hooks are determined by the lowercase version
14893		// Grab necessary hook if one is defined
14894		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
14895			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
14896				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
14897		}
14898
14899		if ( value !== undefined ) {
14900			if ( value === null ) {
14901				jQuery.removeAttr( elem, name );
14902				return;
14903			}
14904
14905			if ( hooks && "set" in hooks &&
14906				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
14907				return ret;
14908			}
14909
14910			elem.setAttribute( name, value + "" );
14911			return value;
14912		}
14913
14914		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
14915			return ret;
14916		}
14917
14918		ret = jQuery.find.attr( elem, name );
14919
14920		// Non-existent attributes return null, we normalize to undefined
14921		return ret == null ? undefined : ret;
14922	},
14923
14924	attrHooks: {
14925		type: {
14926			set: function( elem, value ) {
14927				if ( !support.radioValue && value === "radio" &&
14928					nodeName( elem, "input" ) ) {
14929					var val = elem.value;
14930					elem.setAttribute( "type", value );
14931					if ( val ) {
14932						elem.value = val;
14933					}
14934					return value;
14935				}
14936			}
14937		}
14938	},
14939
14940	removeAttr: function( elem, value ) {
14941		var name,
14942			i = 0,
14943
14944			// Attribute names can contain non-HTML whitespace characters
14945			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
14946			attrNames = value && value.match( rnothtmlwhite );
14947
14948		if ( attrNames && elem.nodeType === 1 ) {
14949			while ( ( name = attrNames[ i++ ] ) ) {
14950				elem.removeAttribute( name );
14951			}
14952		}
14953	}
14954} );
14955
14956// Hooks for boolean attributes
14957boolHook = {
14958	set: function( elem, value, name ) {
14959		if ( value === false ) {
14960
14961			// Remove boolean attributes when set to false
14962			jQuery.removeAttr( elem, name );
14963		} else {
14964			elem.setAttribute( name, name );
14965		}
14966		return name;
14967	}
14968};
14969
14970jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
14971	var getter = attrHandle[ name ] || jQuery.find.attr;
14972
14973	attrHandle[ name ] = function( elem, name, isXML ) {
14974		var ret, handle,
14975			lowercaseName = name.toLowerCase();
14976
14977		if ( !isXML ) {
14978
14979			// Avoid an infinite loop by temporarily removing this function from the getter
14980			handle = attrHandle[ lowercaseName ];
14981			attrHandle[ lowercaseName ] = ret;
14982			ret = getter( elem, name, isXML ) != null ?
14983				lowercaseName :
14984				null;
14985			attrHandle[ lowercaseName ] = handle;
14986		}
14987		return ret;
14988	};
14989} );
14990
14991
14992
14993
14994var rfocusable = /^(?:input|select|textarea|button)$/i,
14995	rclickable = /^(?:a|area)$/i;
14996
14997jQuery.fn.extend( {
14998	prop: function( name, value ) {
14999		return access( this, jQuery.prop, name, value, arguments.length > 1 );
15000	},
15001
15002	removeProp: function( name ) {
15003		return this.each( function() {
15004			delete this[ jQuery.propFix[ name ] || name ];
15005		} );
15006	}
15007} );
15008
15009jQuery.extend( {
15010	prop: function( elem, name, value ) {
15011		var ret, hooks,
15012			nType = elem.nodeType;
15013
15014		// Don't get/set properties on text, comment and attribute nodes
15015		if ( nType === 3 || nType === 8 || nType === 2 ) {
15016			return;
15017		}
15018
15019		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15020
15021			// Fix name and attach hooks
15022			name = jQuery.propFix[ name ] || name;
15023			hooks = jQuery.propHooks[ name ];
15024		}
15025
15026		if ( value !== undefined ) {
15027			if ( hooks && "set" in hooks &&
15028				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15029				return ret;
15030			}
15031
15032			return ( elem[ name ] = value );
15033		}
15034
15035		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15036			return ret;
15037		}
15038
15039		return elem[ name ];
15040	},
15041
15042	propHooks: {
15043		tabIndex: {
15044			get: function( elem ) {
15045
15046				// Support: IE <=9 - 11 only
15047				// elem.tabIndex doesn't always return the
15048				// correct value when it hasn't been explicitly set
15049				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
15050				// Use proper attribute retrieval(#12072)
15051				var tabindex = jQuery.find.attr( elem, "tabindex" );
15052
15053				if ( tabindex ) {
15054					return parseInt( tabindex, 10 );
15055				}
15056
15057				if (
15058					rfocusable.test( elem.nodeName ) ||
15059					rclickable.test( elem.nodeName ) &&
15060					elem.href
15061				) {
15062					return 0;
15063				}
15064
15065				return -1;
15066			}
15067		}
15068	},
15069
15070	propFix: {
15071		"for": "htmlFor",
15072		"class": "className"
15073	}
15074} );
15075
15076// Support: IE <=11 only
15077// Accessing the selectedIndex property
15078// forces the browser to respect setting selected
15079// on the option
15080// The getter ensures a default option is selected
15081// when in an optgroup
15082// eslint rule "no-unused-expressions" is disabled for this code
15083// since it considers such accessions noop
15084if ( !support.optSelected ) {
15085	jQuery.propHooks.selected = {
15086		get: function( elem ) {
15087
15088			/* eslint no-unused-expressions: "off" */
15089
15090			var parent = elem.parentNode;
15091			if ( parent && parent.parentNode ) {
15092				parent.parentNode.selectedIndex;
15093			}
15094			return null;
15095		},
15096		set: function( elem ) {
15097
15098			/* eslint no-unused-expressions: "off" */
15099
15100			var parent = elem.parentNode;
15101			if ( parent ) {
15102				parent.selectedIndex;
15103
15104				if ( parent.parentNode ) {
15105					parent.parentNode.selectedIndex;
15106				}
15107			}
15108		}
15109	};
15110}
15111
15112jQuery.each( [
15113	"tabIndex",
15114	"readOnly",
15115	"maxLength",
15116	"cellSpacing",
15117	"cellPadding",
15118	"rowSpan",
15119	"colSpan",
15120	"useMap",
15121	"frameBorder",
15122	"contentEditable"
15123], function() {
15124	jQuery.propFix[ this.toLowerCase() ] = this;
15125} );
15126
15127
15128
15129
15130	// Strip and collapse whitespace according to HTML spec
15131	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
15132	function stripAndCollapse( value ) {
15133		var tokens = value.match( rnothtmlwhite ) || [];
15134		return tokens.join( " " );
15135	}
15136
15137
15138function getClass( elem ) {
15139	return elem.getAttribute && elem.getAttribute( "class" ) || "";
15140}
15141
15142function classesToArray( value ) {
15143	if ( Array.isArray( value ) ) {
15144		return value;
15145	}
15146	if ( typeof value === "string" ) {
15147		return value.match( rnothtmlwhite ) || [];
15148	}
15149	return [];
15150}
15151
15152jQuery.fn.extend( {
15153	addClass: function( value ) {
15154		var classes, elem, cur, curValue, clazz, j, finalValue,
15155			i = 0;
15156
15157		if ( isFunction( value ) ) {
15158			return this.each( function( j ) {
15159				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
15160			} );
15161		}
15162
15163		classes = classesToArray( value );
15164
15165		if ( classes.length ) {
15166			while ( ( elem = this[ i++ ] ) ) {
15167				curValue = getClass( elem );
15168				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
15169
15170				if ( cur ) {
15171					j = 0;
15172					while ( ( clazz = classes[ j++ ] ) ) {
15173						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
15174							cur += clazz + " ";
15175						}
15176					}
15177
15178					// Only assign if different to avoid unneeded rendering.
15179					finalValue = stripAndCollapse( cur );
15180					if ( curValue !== finalValue ) {
15181						elem.setAttribute( "class", finalValue );
15182					}
15183				}
15184			}
15185		}
15186
15187		return this;
15188	},
15189
15190	removeClass: function( value ) {
15191		var classes, elem, cur, curValue, clazz, j, finalValue,
15192			i = 0;
15193
15194		if ( isFunction( value ) ) {
15195			return this.each( function( j ) {
15196				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
15197			} );
15198		}
15199
15200		if ( !arguments.length ) {
15201			return this.attr( "class", "" );
15202		}
15203
15204		classes = classesToArray( value );
15205
15206		if ( classes.length ) {
15207			while ( ( elem = this[ i++ ] ) ) {
15208				curValue = getClass( elem );
15209
15210				// This expression is here for better compressibility (see addClass)
15211				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
15212
15213				if ( cur ) {
15214					j = 0;
15215					while ( ( clazz = classes[ j++ ] ) ) {
15216
15217						// Remove *all* instances
15218						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
15219							cur = cur.replace( " " + clazz + " ", " " );
15220						}
15221					}
15222
15223					// Only assign if different to avoid unneeded rendering.
15224					finalValue = stripAndCollapse( cur );
15225					if ( curValue !== finalValue ) {
15226						elem.setAttribute( "class", finalValue );
15227					}
15228				}
15229			}
15230		}
15231
15232		return this;
15233	},
15234
15235	toggleClass: function( value, stateVal ) {
15236		var type = typeof value,
15237			isValidValue = type === "string" || Array.isArray( value );
15238
15239		if ( typeof stateVal === "boolean" && isValidValue ) {
15240			return stateVal ? this.addClass( value ) : this.removeClass( value );
15241		}
15242
15243		if ( isFunction( value ) ) {
15244			return this.each( function( i ) {
15245				jQuery( this ).toggleClass(
15246					value.call( this, i, getClass( this ), stateVal ),
15247					stateVal
15248				);
15249			} );
15250		}
15251
15252		return this.each( function() {
15253			var className, i, self, classNames;
15254
15255			if ( isValidValue ) {
15256
15257				// Toggle individual class names
15258				i = 0;
15259				self = jQuery( this );
15260				classNames = classesToArray( value );
15261
15262				while ( ( className = classNames[ i++ ] ) ) {
15263
15264					// Check each className given, space separated list
15265					if ( self.hasClass( className ) ) {
15266						self.removeClass( className );
15267					} else {
15268						self.addClass( className );
15269					}
15270				}
15271
15272			// Toggle whole class name
15273			} else if ( value === undefined || type === "boolean" ) {
15274				className = getClass( this );
15275				if ( className ) {
15276
15277					// Store className if set
15278					dataPriv.set( this, "__className__", className );
15279				}
15280
15281				// If the element has a class name or if we're passed `false`,
15282				// then remove the whole classname (if there was one, the above saved it).
15283				// Otherwise bring back whatever was previously saved (if anything),
15284				// falling back to the empty string if nothing was stored.
15285				if ( this.setAttribute ) {
15286					this.setAttribute( "class",
15287						className || value === false ?
15288							"" :
15289							dataPriv.get( this, "__className__" ) || ""
15290					);
15291				}
15292			}
15293		} );
15294	},
15295
15296	hasClass: function( selector ) {
15297		var className, elem,
15298			i = 0;
15299
15300		className = " " + selector + " ";
15301		while ( ( elem = this[ i++ ] ) ) {
15302			if ( elem.nodeType === 1 &&
15303				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
15304				return true;
15305			}
15306		}
15307
15308		return false;
15309	}
15310} );
15311
15312
15313
15314
15315var rreturn = /\r/g;
15316
15317jQuery.fn.extend( {
15318	val: function( value ) {
15319		var hooks, ret, valueIsFunction,
15320			elem = this[ 0 ];
15321
15322		if ( !arguments.length ) {
15323			if ( elem ) {
15324				hooks = jQuery.valHooks[ elem.type ] ||
15325					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
15326
15327				if ( hooks &&
15328					"get" in hooks &&
15329					( ret = hooks.get( elem, "value" ) ) !== undefined
15330				) {
15331					return ret;
15332				}
15333
15334				ret = elem.value;
15335
15336				// Handle most common string cases
15337				if ( typeof ret === "string" ) {
15338					return ret.replace( rreturn, "" );
15339				}
15340
15341				// Handle cases where value is null/undef or number
15342				return ret == null ? "" : ret;
15343			}
15344
15345			return;
15346		}
15347
15348		valueIsFunction = isFunction( value );
15349
15350		return this.each( function( i ) {
15351			var val;
15352
15353			if ( this.nodeType !== 1 ) {
15354				return;
15355			}
15356
15357			if ( valueIsFunction ) {
15358				val = value.call( this, i, jQuery( this ).val() );
15359			} else {
15360				val = value;
15361			}
15362
15363			// Treat null/undefined as ""; convert numbers to string
15364			if ( val == null ) {
15365				val = "";
15366
15367			} else if ( typeof val === "number" ) {
15368				val += "";
15369
15370			} else if ( Array.isArray( val ) ) {
15371				val = jQuery.map( val, function( value ) {
15372					return value == null ? "" : value + "";
15373				} );
15374			}
15375
15376			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
15377
15378			// If set returns undefined, fall back to normal setting
15379			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
15380				this.value = val;
15381			}
15382		} );
15383	}
15384} );
15385
15386jQuery.extend( {
15387	valHooks: {
15388		option: {
15389			get: function( elem ) {
15390
15391				var val = jQuery.find.attr( elem, "value" );
15392				return val != null ?
15393					val :
15394
15395					// Support: IE <=10 - 11 only
15396					// option.text throws exceptions (#14686, #14858)
15397					// Strip and collapse whitespace
15398					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
15399					stripAndCollapse( jQuery.text( elem ) );
15400			}
15401		},
15402		select: {
15403			get: function( elem ) {
15404				var value, option, i,
15405					options = elem.options,
15406					index = elem.selectedIndex,
15407					one = elem.type === "select-one",
15408					values = one ? null : [],
15409					max = one ? index + 1 : options.length;
15410
15411				if ( index < 0 ) {
15412					i = max;
15413
15414				} else {
15415					i = one ? index : 0;
15416				}
15417
15418				// Loop through all the selected options
15419				for ( ; i < max; i++ ) {
15420					option = options[ i ];
15421
15422					// Support: IE <=9 only
15423					// IE8-9 doesn't update selected after form reset (#2551)
15424					if ( ( option.selected || i === index ) &&
15425
15426							// Don't return options that are disabled or in a disabled optgroup
15427							!option.disabled &&
15428							( !option.parentNode.disabled ||
15429								!nodeName( option.parentNode, "optgroup" ) ) ) {
15430
15431						// Get the specific value for the option
15432						value = jQuery( option ).val();
15433
15434						// We don't need an array for one selects
15435						if ( one ) {
15436							return value;
15437						}
15438
15439						// Multi-Selects return an array
15440						values.push( value );
15441					}
15442				}
15443
15444				return values;
15445			},
15446
15447			set: function( elem, value ) {
15448				var optionSet, option,
15449					options = elem.options,
15450					values = jQuery.makeArray( value ),
15451					i = options.length;
15452
15453				while ( i-- ) {
15454					option = options[ i ];
15455
15456					/* eslint-disable no-cond-assign */
15457
15458					if ( option.selected =
15459						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
15460					) {
15461						optionSet = true;
15462					}
15463
15464					/* eslint-enable no-cond-assign */
15465				}
15466
15467				// Force browsers to behave consistently when non-matching value is set
15468				if ( !optionSet ) {
15469					elem.selectedIndex = -1;
15470				}
15471				return values;
15472			}
15473		}
15474	}
15475} );
15476
15477// Radios and checkboxes getter/setter
15478jQuery.each( [ "radio", "checkbox" ], function() {
15479	jQuery.valHooks[ this ] = {
15480		set: function( elem, value ) {
15481			if ( Array.isArray( value ) ) {
15482				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
15483			}
15484		}
15485	};
15486	if ( !support.checkOn ) {
15487		jQuery.valHooks[ this ].get = function( elem ) {
15488			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
15489		};
15490	}
15491} );
15492
15493
15494
15495
15496// Return jQuery for attributes-only inclusion
15497
15498
15499support.focusin = "onfocusin" in window;
15500
15501
15502var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
15503	stopPropagationCallback = function( e ) {
15504		e.stopPropagation();
15505	};
15506
15507jQuery.extend( jQuery.event, {
15508
15509	trigger: function( event, data, elem, onlyHandlers ) {
15510
15511		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
15512			eventPath = [ elem || document ],
15513			type = hasOwn.call( event, "type" ) ? event.type : event,
15514			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
15515
15516		cur = lastElement = tmp = elem = elem || document;
15517
15518		// Don't do events on text and comment nodes
15519		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
15520			return;
15521		}
15522
15523		// focus/blur morphs to focusin/out; ensure we're not firing them right now
15524		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
15525			return;
15526		}
15527
15528		if ( type.indexOf( "." ) > -1 ) {
15529
15530			// Namespaced trigger; create a regexp to match event type in handle()
15531			namespaces = type.split( "." );
15532			type = namespaces.shift();
15533			namespaces.sort();
15534		}
15535		ontype = type.indexOf( ":" ) < 0 && "on" + type;
15536
15537		// Caller can pass in a jQuery.Event object, Object, or just an event type string
15538		event = event[ jQuery.expando ] ?
15539			event :
15540			new jQuery.Event( type, typeof event === "object" && event );
15541
15542		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
15543		event.isTrigger = onlyHandlers ? 2 : 3;
15544		event.namespace = namespaces.join( "." );
15545		event.rnamespace = event.namespace ?
15546			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
15547			null;
15548
15549		// Clean up the event in case it is being reused
15550		event.result = undefined;
15551		if ( !event.target ) {
15552			event.target = elem;
15553		}
15554
15555		// Clone any incoming data and prepend the event, creating the handler arg list
15556		data = data == null ?
15557			[ event ] :
15558			jQuery.makeArray( data, [ event ] );
15559
15560		// Allow special events to draw outside the lines
15561		special = jQuery.event.special[ type ] || {};
15562		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
15563			return;
15564		}
15565
15566		// Determine event propagation path in advance, per W3C events spec (#9951)
15567		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
15568		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
15569
15570			bubbleType = special.delegateType || type;
15571			if ( !rfocusMorph.test( bubbleType + type ) ) {
15572				cur = cur.parentNode;
15573			}
15574			for ( ; cur; cur = cur.parentNode ) {
15575				eventPath.push( cur );
15576				tmp = cur;
15577			}
15578
15579			// Only add window if we got to document (e.g., not plain obj or detached DOM)
15580			if ( tmp === ( elem.ownerDocument || document ) ) {
15581				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
15582			}
15583		}
15584
15585		// Fire handlers on the event path
15586		i = 0;
15587		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
15588			lastElement = cur;
15589			event.type = i > 1 ?
15590				bubbleType :
15591				special.bindType || type;
15592
15593			// jQuery handler
15594			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
15595				dataPriv.get( cur, "handle" );
15596			if ( handle ) {
15597				handle.apply( cur, data );
15598			}
15599
15600			// Native handler
15601			handle = ontype && cur[ ontype ];
15602			if ( handle && handle.apply && acceptData( cur ) ) {
15603				event.result = handle.apply( cur, data );
15604				if ( event.result === false ) {
15605					event.preventDefault();
15606				}
15607			}
15608		}
15609		event.type = type;
15610
15611		// If nobody prevented the default action, do it now
15612		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
15613
15614			if ( ( !special._default ||
15615				special._default.apply( eventPath.pop(), data ) === false ) &&
15616				acceptData( elem ) ) {
15617
15618				// Call a native DOM method on the target with the same name as the event.
15619				// Don't do default actions on window, that's where global variables be (#6170)
15620				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
15621
15622					// Don't re-trigger an onFOO event when we call its FOO() method
15623					tmp = elem[ ontype ];
15624
15625					if ( tmp ) {
15626						elem[ ontype ] = null;
15627					}
15628
15629					// Prevent re-triggering of the same event, since we already bubbled it above
15630					jQuery.event.triggered = type;
15631
15632					if ( event.isPropagationStopped() ) {
15633						lastElement.addEventListener( type, stopPropagationCallback );
15634					}
15635
15636					elem[ type ]();
15637
15638					if ( event.isPropagationStopped() ) {
15639						lastElement.removeEventListener( type, stopPropagationCallback );
15640					}
15641
15642					jQuery.event.triggered = undefined;
15643
15644					if ( tmp ) {
15645						elem[ ontype ] = tmp;
15646					}
15647				}
15648			}
15649		}
15650
15651		return event.result;
15652	},
15653
15654	// Piggyback on a donor event to simulate a different one
15655	// Used only for `focus(in | out)` events
15656	simulate: function( type, elem, event ) {
15657		var e = jQuery.extend(
15658			new jQuery.Event(),
15659			event,
15660			{
15661				type: type,
15662				isSimulated: true
15663			}
15664		);
15665
15666		jQuery.event.trigger( e, null, elem );
15667	}
15668
15669} );
15670
15671jQuery.fn.extend( {
15672
15673	trigger: function( type, data ) {
15674		return this.each( function() {
15675			jQuery.event.trigger( type, data, this );
15676		} );
15677	},
15678	triggerHandler: function( type, data ) {
15679		var elem = this[ 0 ];
15680		if ( elem ) {
15681			return jQuery.event.trigger( type, data, elem, true );
15682		}
15683	}
15684} );
15685
15686
15687// Support: Firefox <=44
15688// Firefox doesn't have focus(in | out) events
15689// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
15690//
15691// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
15692// focus(in | out) events fire after focus & blur events,
15693// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
15694// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
15695if ( !support.focusin ) {
15696	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
15697
15698		// Attach a single capturing handler on the document while someone wants focusin/focusout
15699		var handler = function( event ) {
15700			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
15701		};
15702
15703		jQuery.event.special[ fix ] = {
15704			setup: function() {
15705
15706				// Handle: regular nodes (via `this.ownerDocument`), window
15707				// (via `this.document`) & document (via `this`).
15708				var doc = this.ownerDocument || this.document || this,
15709					attaches = dataPriv.access( doc, fix );
15710
15711				if ( !attaches ) {
15712					doc.addEventListener( orig, handler, true );
15713				}
15714				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
15715			},
15716			teardown: function() {
15717				var doc = this.ownerDocument || this.document || this,
15718					attaches = dataPriv.access( doc, fix ) - 1;
15719
15720				if ( !attaches ) {
15721					doc.removeEventListener( orig, handler, true );
15722					dataPriv.remove( doc, fix );
15723
15724				} else {
15725					dataPriv.access( doc, fix, attaches );
15726				}
15727			}
15728		};
15729	} );
15730}
15731var location = window.location;
15732
15733var nonce = { guid: Date.now() };
15734
15735var rquery = ( /\?/ );
15736
15737
15738
15739// Cross-browser xml parsing
15740jQuery.parseXML = function( data ) {
15741	var xml, parserErrorElem;
15742	if ( !data || typeof data !== "string" ) {
15743		return null;
15744	}
15745
15746	// Support: IE 9 - 11 only
15747	// IE throws on parseFromString with invalid input.
15748	try {
15749		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
15750	} catch ( e ) {}
15751
15752	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
15753	if ( !xml || parserErrorElem ) {
15754		jQuery.error( "Invalid XML: " + (
15755			parserErrorElem ?
15756				jQuery.map( parserErrorElem.childNodes, function( el ) {
15757					return el.textContent;
15758				} ).join( "\n" ) :
15759				data
15760		) );
15761	}
15762	return xml;
15763};
15764
15765
15766var
15767	rbracket = /\[\]$/,
15768	rCRLF = /\r?\n/g,
15769	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
15770	rsubmittable = /^(?:input|select|textarea|keygen)/i;
15771
15772function buildParams( prefix, obj, traditional, add ) {
15773	var name;
15774
15775	if ( Array.isArray( obj ) ) {
15776
15777		// Serialize array item.
15778		jQuery.each( obj, function( i, v ) {
15779			if ( traditional || rbracket.test( prefix ) ) {
15780
15781				// Treat each array item as a scalar.
15782				add( prefix, v );
15783
15784			} else {
15785
15786				// Item is non-scalar (array or object), encode its numeric index.
15787				buildParams(
15788					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
15789					v,
15790					traditional,
15791					add
15792				);
15793			}
15794		} );
15795
15796	} else if ( !traditional && toType( obj ) === "object" ) {
15797
15798		// Serialize object item.
15799		for ( name in obj ) {
15800			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
15801		}
15802
15803	} else {
15804
15805		// Serialize scalar item.
15806		add( prefix, obj );
15807	}
15808}
15809
15810// Serialize an array of form elements or a set of
15811// key/values into a query string
15812jQuery.param = function( a, traditional ) {
15813	var prefix,
15814		s = [],
15815		add = function( key, valueOrFunction ) {
15816
15817			// If value is a function, invoke it and use its return value
15818			var value = isFunction( valueOrFunction ) ?
15819				valueOrFunction() :
15820				valueOrFunction;
15821
15822			s[ s.length ] = encodeURIComponent( key ) + "=" +
15823				encodeURIComponent( value == null ? "" : value );
15824		};
15825
15826	if ( a == null ) {
15827		return "";
15828	}
15829
15830	// If an array was passed in, assume that it is an array of form elements.
15831	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
15832
15833		// Serialize the form elements
15834		jQuery.each( a, function() {
15835			add( this.name, this.value );
15836		} );
15837
15838	} else {
15839
15840		// If traditional, encode the "old" way (the way 1.3.2 or older
15841		// did it), otherwise encode params recursively.
15842		for ( prefix in a ) {
15843			buildParams( prefix, a[ prefix ], traditional, add );
15844		}
15845	}
15846
15847	// Return the resulting serialization
15848	return s.join( "&" );
15849};
15850
15851jQuery.fn.extend( {
15852	serialize: function() {
15853		return jQuery.param( this.serializeArray() );
15854	},
15855	serializeArray: function() {
15856		return this.map( function() {
15857
15858			// Can add propHook for "elements" to filter or add form elements
15859			var elements = jQuery.prop( this, "elements" );
15860			return elements ? jQuery.makeArray( elements ) : this;
15861		} ).filter( function() {
15862			var type = this.type;
15863
15864			// Use .is( ":disabled" ) so that fieldset[disabled] works
15865			return this.name && !jQuery( this ).is( ":disabled" ) &&
15866				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
15867				( this.checked || !rcheckableType.test( type ) );
15868		} ).map( function( _i, elem ) {
15869			var val = jQuery( this ).val();
15870
15871			if ( val == null ) {
15872				return null;
15873			}
15874
15875			if ( Array.isArray( val ) ) {
15876				return jQuery.map( val, function( val ) {
15877					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
15878				} );
15879			}
15880
15881			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
15882		} ).get();
15883	}
15884} );
15885
15886
15887var
15888	r20 = /%20/g,
15889	rhash = /#.*$/,
15890	rantiCache = /([?&])_=[^&]*/,
15891	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
15892
15893	// #7653, #8125, #8152: local protocol detection
15894	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
15895	rnoContent = /^(?:GET|HEAD)$/,
15896	rprotocol = /^\/\//,
15897
15898	/* Prefilters
15899	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
15900	 * 2) These are called:
15901	 *    - BEFORE asking for a transport
15902	 *    - AFTER param serialization (s.data is a string if s.processData is true)
15903	 * 3) key is the dataType
15904	 * 4) the catchall symbol "*" can be used
15905	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
15906	 */
15907	prefilters = {},
15908
15909	/* Transports bindings
15910	 * 1) key is the dataType
15911	 * 2) the catchall symbol "*" can be used
15912	 * 3) selection will start with transport dataType and THEN go to "*" if needed
15913	 */
15914	transports = {},
15915
15916	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
15917	allTypes = "*/".concat( "*" ),
15918
15919	// Anchor tag for parsing the document origin
15920	originAnchor = document.createElement( "a" );
15921
15922originAnchor.href = location.href;
15923
15924// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
15925function addToPrefiltersOrTransports( structure ) {
15926
15927	// dataTypeExpression is optional and defaults to "*"
15928	return function( dataTypeExpression, func ) {
15929
15930		if ( typeof dataTypeExpression !== "string" ) {
15931			func = dataTypeExpression;
15932			dataTypeExpression = "*";
15933		}
15934
15935		var dataType,
15936			i = 0,
15937			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
15938
15939		if ( isFunction( func ) ) {
15940
15941			// For each dataType in the dataTypeExpression
15942			while ( ( dataType = dataTypes[ i++ ] ) ) {
15943
15944				// Prepend if requested
15945				if ( dataType[ 0 ] === "+" ) {
15946					dataType = dataType.slice( 1 ) || "*";
15947					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
15948
15949				// Otherwise append
15950				} else {
15951					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
15952				}
15953			}
15954		}
15955	};
15956}
15957
15958// Base inspection function for prefilters and transports
15959function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
15960
15961	var inspected = {},
15962		seekingTransport = ( structure === transports );
15963
15964	function inspect( dataType ) {
15965		var selected;
15966		inspected[ dataType ] = true;
15967		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
15968			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
15969			if ( typeof dataTypeOrTransport === "string" &&
15970				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
15971
15972				options.dataTypes.unshift( dataTypeOrTransport );
15973				inspect( dataTypeOrTransport );
15974				return false;
15975			} else if ( seekingTransport ) {
15976				return !( selected = dataTypeOrTransport );
15977			}
15978		} );
15979		return selected;
15980	}
15981
15982	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
15983}
15984
15985// A special extend for ajax options
15986// that takes "flat" options (not to be deep extended)
15987// Fixes #9887
15988function ajaxExtend( target, src ) {
15989	var key, deep,
15990		flatOptions = jQuery.ajaxSettings.flatOptions || {};
15991
15992	for ( key in src ) {
15993		if ( src[ key ] !== undefined ) {
15994			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
15995		}
15996	}
15997	if ( deep ) {
15998		jQuery.extend( true, target, deep );
15999	}
16000
16001	return target;
16002}
16003
16004/* Handles responses to an ajax request:
16005 * - finds the right dataType (mediates between content-type and expected dataType)
16006 * - returns the corresponding response
16007 */
16008function ajaxHandleResponses( s, jqXHR, responses ) {
16009
16010	var ct, type, finalDataType, firstDataType,
16011		contents = s.contents,
16012		dataTypes = s.dataTypes;
16013
16014	// Remove auto dataType and get content-type in the process
16015	while ( dataTypes[ 0 ] === "*" ) {
16016		dataTypes.shift();
16017		if ( ct === undefined ) {
16018			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
16019		}
16020	}
16021
16022	// Check if we're dealing with a known content-type
16023	if ( ct ) {
16024		for ( type in contents ) {
16025			if ( contents[ type ] && contents[ type ].test( ct ) ) {
16026				dataTypes.unshift( type );
16027				break;
16028			}
16029		}
16030	}
16031
16032	// Check to see if we have a response for the expected dataType
16033	if ( dataTypes[ 0 ] in responses ) {
16034		finalDataType = dataTypes[ 0 ];
16035	} else {
16036
16037		// Try convertible dataTypes
16038		for ( type in responses ) {
16039			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
16040				finalDataType = type;
16041				break;
16042			}
16043			if ( !firstDataType ) {
16044				firstDataType = type;
16045			}
16046		}
16047
16048		// Or just use first one
16049		finalDataType = finalDataType || firstDataType;
16050	}
16051
16052	// If we found a dataType
16053	// We add the dataType to the list if needed
16054	// and return the corresponding response
16055	if ( finalDataType ) {
16056		if ( finalDataType !== dataTypes[ 0 ] ) {
16057			dataTypes.unshift( finalDataType );
16058		}
16059		return responses[ finalDataType ];
16060	}
16061}
16062
16063/* Chain conversions given the request and the original response
16064 * Also sets the responseXXX fields on the jqXHR instance
16065 */
16066function ajaxConvert( s, response, jqXHR, isSuccess ) {
16067	var conv2, current, conv, tmp, prev,
16068		converters = {},
16069
16070		// Work with a copy of dataTypes in case we need to modify it for conversion
16071		dataTypes = s.dataTypes.slice();
16072
16073	// Create converters map with lowercased keys
16074	if ( dataTypes[ 1 ] ) {
16075		for ( conv in s.converters ) {
16076			converters[ conv.toLowerCase() ] = s.converters[ conv ];
16077		}
16078	}
16079
16080	current = dataTypes.shift();
16081
16082	// Convert to each sequential dataType
16083	while ( current ) {
16084
16085		if ( s.responseFields[ current ] ) {
16086			jqXHR[ s.responseFields[ current ] ] = response;
16087		}
16088
16089		// Apply the dataFilter if provided
16090		if ( !prev && isSuccess && s.dataFilter ) {
16091			response = s.dataFilter( response, s.dataType );
16092		}
16093
16094		prev = current;
16095		current = dataTypes.shift();
16096
16097		if ( current ) {
16098
16099			// There's only work to do if current dataType is non-auto
16100			if ( current === "*" ) {
16101
16102				current = prev;
16103
16104			// Convert response if prev dataType is non-auto and differs from current
16105			} else if ( prev !== "*" && prev !== current ) {
16106
16107				// Seek a direct converter
16108				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
16109
16110				// If none found, seek a pair
16111				if ( !conv ) {
16112					for ( conv2 in converters ) {
16113
16114						// If conv2 outputs current
16115						tmp = conv2.split( " " );
16116						if ( tmp[ 1 ] === current ) {
16117
16118							// If prev can be converted to accepted input
16119							conv = converters[ prev + " " + tmp[ 0 ] ] ||
16120								converters[ "* " + tmp[ 0 ] ];
16121							if ( conv ) {
16122
16123								// Condense equivalence converters
16124								if ( conv === true ) {
16125									conv = converters[ conv2 ];
16126
16127								// Otherwise, insert the intermediate dataType
16128								} else if ( converters[ conv2 ] !== true ) {
16129									current = tmp[ 0 ];
16130									dataTypes.unshift( tmp[ 1 ] );
16131								}
16132								break;
16133							}
16134						}
16135					}
16136				}
16137
16138				// Apply converter (if not an equivalence)
16139				if ( conv !== true ) {
16140
16141					// Unless errors are allowed to bubble, catch and return them
16142					if ( conv && s.throws ) {
16143						response = conv( response );
16144					} else {
16145						try {
16146							response = conv( response );
16147						} catch ( e ) {
16148							return {
16149								state: "parsererror",
16150								error: conv ? e : "No conversion from " + prev + " to " + current
16151							};
16152						}
16153					}
16154				}
16155			}
16156		}
16157	}
16158
16159	return { state: "success", data: response };
16160}
16161
16162jQuery.extend( {
16163
16164	// Counter for holding the number of active queries
16165	active: 0,
16166
16167	// Last-Modified header cache for next request
16168	lastModified: {},
16169	etag: {},
16170
16171	ajaxSettings: {
16172		url: location.href,
16173		type: "GET",
16174		isLocal: rlocalProtocol.test( location.protocol ),
16175		global: true,
16176		processData: true,
16177		async: true,
16178		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
16179
16180		/*
16181		timeout: 0,
16182		data: null,
16183		dataType: null,
16184		username: null,
16185		password: null,
16186		cache: null,
16187		throws: false,
16188		traditional: false,
16189		headers: {},
16190		*/
16191
16192		accepts: {
16193			"*": allTypes,
16194			text: "text/plain",
16195			html: "text/html",
16196			xml: "application/xml, text/xml",
16197			json: "application/json, text/javascript"
16198		},
16199
16200		contents: {
16201			xml: /\bxml\b/,
16202			html: /\bhtml/,
16203			json: /\bjson\b/
16204		},
16205
16206		responseFields: {
16207			xml: "responseXML",
16208			text: "responseText",
16209			json: "responseJSON"
16210		},
16211
16212		// Data converters
16213		// Keys separate source (or catchall "*") and destination types with a single space
16214		converters: {
16215
16216			// Convert anything to text
16217			"* text": String,
16218
16219			// Text to html (true = no transformation)
16220			"text html": true,
16221
16222			// Evaluate text as a json expression
16223			"text json": JSON.parse,
16224
16225			// Parse text as xml
16226			"text xml": jQuery.parseXML
16227		},
16228
16229		// For options that shouldn't be deep extended:
16230		// you can add your own custom options here if
16231		// and when you create one that shouldn't be
16232		// deep extended (see ajaxExtend)
16233		flatOptions: {
16234			url: true,
16235			context: true
16236		}
16237	},
16238
16239	// Creates a full fledged settings object into target
16240	// with both ajaxSettings and settings fields.
16241	// If target is omitted, writes into ajaxSettings.
16242	ajaxSetup: function( target, settings ) {
16243		return settings ?
16244
16245			// Building a settings object
16246			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
16247
16248			// Extending ajaxSettings
16249			ajaxExtend( jQuery.ajaxSettings, target );
16250	},
16251
16252	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
16253	ajaxTransport: addToPrefiltersOrTransports( transports ),
16254
16255	// Main method
16256	ajax: function( url, options ) {
16257
16258		// If url is an object, simulate pre-1.5 signature
16259		if ( typeof url === "object" ) {
16260			options = url;
16261			url = undefined;
16262		}
16263
16264		// Force options to be an object
16265		options = options || {};
16266
16267		var transport,
16268
16269			// URL without anti-cache param
16270			cacheURL,
16271
16272			// Response headers
16273			responseHeadersString,
16274			responseHeaders,
16275
16276			// timeout handle
16277			timeoutTimer,
16278
16279			// Url cleanup var
16280			urlAnchor,
16281
16282			// Request state (becomes false upon send and true upon completion)
16283			completed,
16284
16285			// To know if global events are to be dispatched
16286			fireGlobals,
16287
16288			// Loop variable
16289			i,
16290
16291			// uncached part of the url
16292			uncached,
16293
16294			// Create the final options object
16295			s = jQuery.ajaxSetup( {}, options ),
16296
16297			// Callbacks context
16298			callbackContext = s.context || s,
16299
16300			// Context for global events is callbackContext if it is a DOM node or jQuery collection
16301			globalEventContext = s.context &&
16302				( callbackContext.nodeType || callbackContext.jquery ) ?
16303				jQuery( callbackContext ) :
16304				jQuery.event,
16305
16306			// Deferreds
16307			deferred = jQuery.Deferred(),
16308			completeDeferred = jQuery.Callbacks( "once memory" ),
16309
16310			// Status-dependent callbacks
16311			statusCode = s.statusCode || {},
16312
16313			// Headers (they are sent all at once)
16314			requestHeaders = {},
16315			requestHeadersNames = {},
16316
16317			// Default abort message
16318			strAbort = "canceled",
16319
16320			// Fake xhr
16321			jqXHR = {
16322				readyState: 0,
16323
16324				// Builds headers hashtable if needed
16325				getResponseHeader: function( key ) {
16326					var match;
16327					if ( completed ) {
16328						if ( !responseHeaders ) {
16329							responseHeaders = {};
16330							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
16331								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
16332									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
16333										.concat( match[ 2 ] );
16334							}
16335						}
16336						match = responseHeaders[ key.toLowerCase() + " " ];
16337					}
16338					return match == null ? null : match.join( ", " );
16339				},
16340
16341				// Raw string
16342				getAllResponseHeaders: function() {
16343					return completed ? responseHeadersString : null;
16344				},
16345
16346				// Caches the header
16347				setRequestHeader: function( name, value ) {
16348					if ( completed == null ) {
16349						name = requestHeadersNames[ name.toLowerCase() ] =
16350							requestHeadersNames[ name.toLowerCase() ] || name;
16351						requestHeaders[ name ] = value;
16352					}
16353					return this;
16354				},
16355
16356				// Overrides response content-type header
16357				overrideMimeType: function( type ) {
16358					if ( completed == null ) {
16359						s.mimeType = type;
16360					}
16361					return this;
16362				},
16363
16364				// Status-dependent callbacks
16365				statusCode: function( map ) {
16366					var code;
16367					if ( map ) {
16368						if ( completed ) {
16369
16370							// Execute the appropriate callbacks
16371							jqXHR.always( map[ jqXHR.status ] );
16372						} else {
16373
16374							// Lazy-add the new callbacks in a way that preserves old ones
16375							for ( code in map ) {
16376								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
16377							}
16378						}
16379					}
16380					return this;
16381				},
16382
16383				// Cancel the request
16384				abort: function( statusText ) {
16385					var finalText = statusText || strAbort;
16386					if ( transport ) {
16387						transport.abort( finalText );
16388					}
16389					done( 0, finalText );
16390					return this;
16391				}
16392			};
16393
16394		// Attach deferreds
16395		deferred.promise( jqXHR );
16396
16397		// Add protocol if not provided (prefilters might expect it)
16398		// Handle falsy url in the settings object (#10093: consistency with old signature)
16399		// We also use the url parameter if available
16400		s.url = ( ( url || s.url || location.href ) + "" )
16401			.replace( rprotocol, location.protocol + "//" );
16402
16403		// Alias method option to type as per ticket #12004
16404		s.type = options.method || options.type || s.method || s.type;
16405
16406		// Extract dataTypes list
16407		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
16408
16409		// A cross-domain request is in order when the origin doesn't match the current origin.
16410		if ( s.crossDomain == null ) {
16411			urlAnchor = document.createElement( "a" );
16412
16413			// Support: IE <=8 - 11, Edge 12 - 15
16414			// IE throws exception on accessing the href property if url is malformed,
16415			// e.g. http://example.com:80x/
16416			try {
16417				urlAnchor.href = s.url;
16418
16419				// Support: IE <=8 - 11 only
16420				// Anchor's host property isn't correctly set when s.url is relative
16421				urlAnchor.href = urlAnchor.href;
16422				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
16423					urlAnchor.protocol + "//" + urlAnchor.host;
16424			} catch ( e ) {
16425
16426				// If there is an error parsing the URL, assume it is crossDomain,
16427				// it can be rejected by the transport if it is invalid
16428				s.crossDomain = true;
16429			}
16430		}
16431
16432		// Convert data if not already a string
16433		if ( s.data && s.processData && typeof s.data !== "string" ) {
16434			s.data = jQuery.param( s.data, s.traditional );
16435		}
16436
16437		// Apply prefilters
16438		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
16439
16440		// If request was aborted inside a prefilter, stop there
16441		if ( completed ) {
16442			return jqXHR;
16443		}
16444
16445		// We can fire global events as of now if asked to
16446		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
16447		fireGlobals = jQuery.event && s.global;
16448
16449		// Watch for a new set of requests
16450		if ( fireGlobals && jQuery.active++ === 0 ) {
16451			jQuery.event.trigger( "ajaxStart" );
16452		}
16453
16454		// Uppercase the type
16455		s.type = s.type.toUpperCase();
16456
16457		// Determine if request has content
16458		s.hasContent = !rnoContent.test( s.type );
16459
16460		// Save the URL in case we're toying with the If-Modified-Since
16461		// and/or If-None-Match header later on
16462		// Remove hash to simplify url manipulation
16463		cacheURL = s.url.replace( rhash, "" );
16464
16465		// More options handling for requests with no content
16466		if ( !s.hasContent ) {
16467
16468			// Remember the hash so we can put it back
16469			uncached = s.url.slice( cacheURL.length );
16470
16471			// If data is available and should be processed, append data to url
16472			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
16473				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
16474
16475				// #9682: remove data so that it's not used in an eventual retry
16476				delete s.data;
16477			}
16478
16479			// Add or update anti-cache param if needed
16480			if ( s.cache === false ) {
16481				cacheURL = cacheURL.replace( rantiCache, "$1" );
16482				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
16483					uncached;
16484			}
16485
16486			// Put hash and anti-cache on the URL that will be requested (gh-1732)
16487			s.url = cacheURL + uncached;
16488
16489		// Change '%20' to '+' if this is encoded form body content (gh-2658)
16490		} else if ( s.data && s.processData &&
16491			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
16492			s.data = s.data.replace( r20, "+" );
16493		}
16494
16495		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
16496		if ( s.ifModified ) {
16497			if ( jQuery.lastModified[ cacheURL ] ) {
16498				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
16499			}
16500			if ( jQuery.etag[ cacheURL ] ) {
16501				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
16502			}
16503		}
16504
16505		// Set the correct header, if data is being sent
16506		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
16507			jqXHR.setRequestHeader( "Content-Type", s.contentType );
16508		}
16509
16510		// Set the Accepts header for the server, depending on the dataType
16511		jqXHR.setRequestHeader(
16512			"Accept",
16513			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
16514				s.accepts[ s.dataTypes[ 0 ] ] +
16515					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
16516				s.accepts[ "*" ]
16517		);
16518
16519		// Check for headers option
16520		for ( i in s.headers ) {
16521			jqXHR.setRequestHeader( i, s.headers[ i ] );
16522		}
16523
16524		// Allow custom headers/mimetypes and early abort
16525		if ( s.beforeSend &&
16526			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
16527
16528			// Abort if not done already and return
16529			return jqXHR.abort();
16530		}
16531
16532		// Aborting is no longer a cancellation
16533		strAbort = "abort";
16534
16535		// Install callbacks on deferreds
16536		completeDeferred.add( s.complete );
16537		jqXHR.done( s.success );
16538		jqXHR.fail( s.error );
16539
16540		// Get transport
16541		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
16542
16543		// If no transport, we auto-abort
16544		if ( !transport ) {
16545			done( -1, "No Transport" );
16546		} else {
16547			jqXHR.readyState = 1;
16548
16549			// Send global event
16550			if ( fireGlobals ) {
16551				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
16552			}
16553
16554			// If request was aborted inside ajaxSend, stop there
16555			if ( completed ) {
16556				return jqXHR;
16557			}
16558
16559			// Timeout
16560			if ( s.async && s.timeout > 0 ) {
16561				timeoutTimer = window.setTimeout( function() {
16562					jqXHR.abort( "timeout" );
16563				}, s.timeout );
16564			}
16565
16566			try {
16567				completed = false;
16568				transport.send( requestHeaders, done );
16569			} catch ( e ) {
16570
16571				// Rethrow post-completion exceptions
16572				if ( completed ) {
16573					throw e;
16574				}
16575
16576				// Propagate others as results
16577				done( -1, e );
16578			}
16579		}
16580
16581		// Callback for when everything is done
16582		function done( status, nativeStatusText, responses, headers ) {
16583			var isSuccess, success, error, response, modified,
16584				statusText = nativeStatusText;
16585
16586			// Ignore repeat invocations
16587			if ( completed ) {
16588				return;
16589			}
16590
16591			completed = true;
16592
16593			// Clear timeout if it exists
16594			if ( timeoutTimer ) {
16595				window.clearTimeout( timeoutTimer );
16596			}
16597
16598			// Dereference transport for early garbage collection
16599			// (no matter how long the jqXHR object will be used)
16600			transport = undefined;
16601
16602			// Cache response headers
16603			responseHeadersString = headers || "";
16604
16605			// Set readyState
16606			jqXHR.readyState = status > 0 ? 4 : 0;
16607
16608			// Determine if successful
16609			isSuccess = status >= 200 && status < 300 || status === 304;
16610
16611			// Get response data
16612			if ( responses ) {
16613				response = ajaxHandleResponses( s, jqXHR, responses );
16614			}
16615
16616			// Use a noop converter for missing script but not if jsonp
16617			if ( !isSuccess &&
16618				jQuery.inArray( "script", s.dataTypes ) > -1 &&
16619				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
16620				s.converters[ "text script" ] = function() {};
16621			}
16622
16623			// Convert no matter what (that way responseXXX fields are always set)
16624			response = ajaxConvert( s, response, jqXHR, isSuccess );
16625
16626			// If successful, handle type chaining
16627			if ( isSuccess ) {
16628
16629				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
16630				if ( s.ifModified ) {
16631					modified = jqXHR.getResponseHeader( "Last-Modified" );
16632					if ( modified ) {
16633						jQuery.lastModified[ cacheURL ] = modified;
16634					}
16635					modified = jqXHR.getResponseHeader( "etag" );
16636					if ( modified ) {
16637						jQuery.etag[ cacheURL ] = modified;
16638					}
16639				}
16640
16641				// if no content
16642				if ( status === 204 || s.type === "HEAD" ) {
16643					statusText = "nocontent";
16644
16645				// if not modified
16646				} else if ( status === 304 ) {
16647					statusText = "notmodified";
16648
16649				// If we have data, let's convert it
16650				} else {
16651					statusText = response.state;
16652					success = response.data;
16653					error = response.error;
16654					isSuccess = !error;
16655				}
16656			} else {
16657
16658				// Extract error from statusText and normalize for non-aborts
16659				error = statusText;
16660				if ( status || !statusText ) {
16661					statusText = "error";
16662					if ( status < 0 ) {
16663						status = 0;
16664					}
16665				}
16666			}
16667
16668			// Set data for the fake xhr object
16669			jqXHR.status = status;
16670			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
16671
16672			// Success/Error
16673			if ( isSuccess ) {
16674				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
16675			} else {
16676				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
16677			}
16678
16679			// Status-dependent callbacks
16680			jqXHR.statusCode( statusCode );
16681			statusCode = undefined;
16682
16683			if ( fireGlobals ) {
16684				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
16685					[ jqXHR, s, isSuccess ? success : error ] );
16686			}
16687
16688			// Complete
16689			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
16690
16691			if ( fireGlobals ) {
16692				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
16693
16694				// Handle the global AJAX counter
16695				if ( !( --jQuery.active ) ) {
16696					jQuery.event.trigger( "ajaxStop" );
16697				}
16698			}
16699		}
16700
16701		return jqXHR;
16702	},
16703
16704	getJSON: function( url, data, callback ) {
16705		return jQuery.get( url, data, callback, "json" );
16706	},
16707
16708	getScript: function( url, callback ) {
16709		return jQuery.get( url, undefined, callback, "script" );
16710	}
16711} );
16712
16713jQuery.each( [ "get", "post" ], function( _i, method ) {
16714	jQuery[ method ] = function( url, data, callback, type ) {
16715
16716		// Shift arguments if data argument was omitted
16717		if ( isFunction( data ) ) {
16718			type = type || callback;
16719			callback = data;
16720			data = undefined;
16721		}
16722
16723		// The url can be an options object (which then must have .url)
16724		return jQuery.ajax( jQuery.extend( {
16725			url: url,
16726			type: method,
16727			dataType: type,
16728			data: data,
16729			success: callback
16730		}, jQuery.isPlainObject( url ) && url ) );
16731	};
16732} );
16733
16734jQuery.ajaxPrefilter( function( s ) {
16735	var i;
16736	for ( i in s.headers ) {
16737		if ( i.toLowerCase() === "content-type" ) {
16738			s.contentType = s.headers[ i ] || "";
16739		}
16740	}
16741} );
16742
16743
16744jQuery._evalUrl = function( url, options, doc ) {
16745	return jQuery.ajax( {
16746		url: url,
16747
16748		// Make this explicit, since user can override this through ajaxSetup (#11264)
16749		type: "GET",
16750		dataType: "script",
16751		cache: true,
16752		async: false,
16753		global: false,
16754
16755		// Only evaluate the response if it is successful (gh-4126)
16756		// dataFilter is not invoked for failure responses, so using it instead
16757		// of the default converter is kludgy but it works.
16758		converters: {
16759			"text script": function() {}
16760		},
16761		dataFilter: function( response ) {
16762			jQuery.globalEval( response, options, doc );
16763		}
16764	} );
16765};
16766
16767
16768jQuery.fn.extend( {
16769	wrapAll: function( html ) {
16770		var wrap;
16771
16772		if ( this[ 0 ] ) {
16773			if ( isFunction( html ) ) {
16774				html = html.call( this[ 0 ] );
16775			}
16776
16777			// The elements to wrap the target around
16778			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
16779
16780			if ( this[ 0 ].parentNode ) {
16781				wrap.insertBefore( this[ 0 ] );
16782			}
16783
16784			wrap.map( function() {
16785				var elem = this;
16786
16787				while ( elem.firstElementChild ) {
16788					elem = elem.firstElementChild;
16789				}
16790
16791				return elem;
16792			} ).append( this );
16793		}
16794
16795		return this;
16796	},
16797
16798	wrapInner: function( html ) {
16799		if ( isFunction( html ) ) {
16800			return this.each( function( i ) {
16801				jQuery( this ).wrapInner( html.call( this, i ) );
16802			} );
16803		}
16804
16805		return this.each( function() {
16806			var self = jQuery( this ),
16807				contents = self.contents();
16808
16809			if ( contents.length ) {
16810				contents.wrapAll( html );
16811
16812			} else {
16813				self.append( html );
16814			}
16815		} );
16816	},
16817
16818	wrap: function( html ) {
16819		var htmlIsFunction = isFunction( html );
16820
16821		return this.each( function( i ) {
16822			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
16823		} );
16824	},
16825
16826	unwrap: function( selector ) {
16827		this.parent( selector ).not( "body" ).each( function() {
16828			jQuery( this ).replaceWith( this.childNodes );
16829		} );
16830		return this;
16831	}
16832} );
16833
16834
16835jQuery.expr.pseudos.hidden = function( elem ) {
16836	return !jQuery.expr.pseudos.visible( elem );
16837};
16838jQuery.expr.pseudos.visible = function( elem ) {
16839	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
16840};
16841
16842
16843
16844
16845jQuery.ajaxSettings.xhr = function() {
16846	try {
16847		return new window.XMLHttpRequest();
16848	} catch ( e ) {}
16849};
16850
16851var xhrSuccessStatus = {
16852
16853		// File protocol always yields status code 0, assume 200
16854		0: 200,
16855
16856		// Support: IE <=9 only
16857		// #1450: sometimes IE returns 1223 when it should be 204
16858		1223: 204
16859	},
16860	xhrSupported = jQuery.ajaxSettings.xhr();
16861
16862support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
16863support.ajax = xhrSupported = !!xhrSupported;
16864
16865jQuery.ajaxTransport( function( options ) {
16866	var callback, errorCallback;
16867
16868	// Cross domain only allowed if supported through XMLHttpRequest
16869	if ( support.cors || xhrSupported && !options.crossDomain ) {
16870		return {
16871			send: function( headers, complete ) {
16872				var i,
16873					xhr = options.xhr();
16874
16875				xhr.open(
16876					options.type,
16877					options.url,
16878					options.async,
16879					options.username,
16880					options.password
16881				);
16882
16883				// Apply custom fields if provided
16884				if ( options.xhrFields ) {
16885					for ( i in options.xhrFields ) {
16886						xhr[ i ] = options.xhrFields[ i ];
16887					}
16888				}
16889
16890				// Override mime type if needed
16891				if ( options.mimeType && xhr.overrideMimeType ) {
16892					xhr.overrideMimeType( options.mimeType );
16893				}
16894
16895				// X-Requested-With header
16896				// For cross-domain requests, seeing as conditions for a preflight are
16897				// akin to a jigsaw puzzle, we simply never set it to be sure.
16898				// (it can always be set on a per-request basis or even using ajaxSetup)
16899				// For same-domain requests, won't change header if already provided.
16900				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
16901					headers[ "X-Requested-With" ] = "XMLHttpRequest";
16902				}
16903
16904				// Set headers
16905				for ( i in headers ) {
16906					xhr.setRequestHeader( i, headers[ i ] );
16907				}
16908
16909				// Callback
16910				callback = function( type ) {
16911					return function() {
16912						if ( callback ) {
16913							callback = errorCallback = xhr.onload =
16914								xhr.onerror = xhr.onabort = xhr.ontimeout =
16915									xhr.onreadystatechange = null;
16916
16917							if ( type === "abort" ) {
16918								xhr.abort();
16919							} else if ( type === "error" ) {
16920
16921								// Support: IE <=9 only
16922								// On a manual native abort, IE9 throws
16923								// errors on any property access that is not readyState
16924								if ( typeof xhr.status !== "number" ) {
16925									complete( 0, "error" );
16926								} else {
16927									complete(
16928
16929										// File: protocol always yields status 0; see #8605, #14207
16930										xhr.status,
16931										xhr.statusText
16932									);
16933								}
16934							} else {
16935								complete(
16936									xhrSuccessStatus[ xhr.status ] || xhr.status,
16937									xhr.statusText,
16938
16939									// Support: IE <=9 only
16940									// IE9 has no XHR2 but throws on binary (trac-11426)
16941									// For XHR2 non-text, let the caller handle it (gh-2498)
16942									( xhr.responseType || "text" ) !== "text"  ||
16943									typeof xhr.responseText !== "string" ?
16944										{ binary: xhr.response } :
16945										{ text: xhr.responseText },
16946									xhr.getAllResponseHeaders()
16947								);
16948							}
16949						}
16950					};
16951				};
16952
16953				// Listen to events
16954				xhr.onload = callback();
16955				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
16956
16957				// Support: IE 9 only
16958				// Use onreadystatechange to replace onabort
16959				// to handle uncaught aborts
16960				if ( xhr.onabort !== undefined ) {
16961					xhr.onabort = errorCallback;
16962				} else {
16963					xhr.onreadystatechange = function() {
16964
16965						// Check readyState before timeout as it changes
16966						if ( xhr.readyState === 4 ) {
16967
16968							// Allow onerror to be called first,
16969							// but that will not handle a native abort
16970							// Also, save errorCallback to a variable
16971							// as xhr.onerror cannot be accessed
16972							window.setTimeout( function() {
16973								if ( callback ) {
16974									errorCallback();
16975								}
16976							} );
16977						}
16978					};
16979				}
16980
16981				// Create the abort callback
16982				callback = callback( "abort" );
16983
16984				try {
16985
16986					// Do send the request (this may raise an exception)
16987					xhr.send( options.hasContent && options.data || null );
16988				} catch ( e ) {
16989
16990					// #14683: Only rethrow if this hasn't been notified as an error yet
16991					if ( callback ) {
16992						throw e;
16993					}
16994				}
16995			},
16996
16997			abort: function() {
16998				if ( callback ) {
16999					callback();
17000				}
17001			}
17002		};
17003	}
17004} );
17005
17006
17007
17008
17009// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
17010jQuery.ajaxPrefilter( function( s ) {
17011	if ( s.crossDomain ) {
17012		s.contents.script = false;
17013	}
17014} );
17015
17016// Install script dataType
17017jQuery.ajaxSetup( {
17018	accepts: {
17019		script: "text/javascript, application/javascript, " +
17020			"application/ecmascript, application/x-ecmascript"
17021	},
17022	contents: {
17023		script: /\b(?:java|ecma)script\b/
17024	},
17025	converters: {
17026		"text script": function( text ) {
17027			jQuery.globalEval( text );
17028			return text;
17029		}
17030	}
17031} );
17032
17033// Handle cache's special case and crossDomain
17034jQuery.ajaxPrefilter( "script", function( s ) {
17035	if ( s.cache === undefined ) {
17036		s.cache = false;
17037	}
17038	if ( s.crossDomain ) {
17039		s.type = "GET";
17040	}
17041} );
17042
17043// Bind script tag hack transport
17044jQuery.ajaxTransport( "script", function( s ) {
17045
17046	// This transport only deals with cross domain or forced-by-attrs requests
17047	if ( s.crossDomain || s.scriptAttrs ) {
17048		var script, callback;
17049		return {
17050			send: function( _, complete ) {
17051				script = jQuery( "<script>" )
17052					.attr( s.scriptAttrs || {} )
17053					.prop( { charset: s.scriptCharset, src: s.url } )
17054					.on( "load error", callback = function( evt ) {
17055						script.remove();
17056						callback = null;
17057						if ( evt ) {
17058							complete( evt.type === "error" ? 404 : 200, evt.type );
17059						}
17060					} );
17061
17062				// Use native DOM manipulation to avoid our domManip AJAX trickery
17063				document.head.appendChild( script[ 0 ] );
17064			},
17065			abort: function() {
17066				if ( callback ) {
17067					callback();
17068				}
17069			}
17070		};
17071	}
17072} );
17073
17074
17075
17076
17077var oldCallbacks = [],
17078	rjsonp = /(=)\?(?=&|$)|\?\?/;
17079
17080// Default jsonp settings
17081jQuery.ajaxSetup( {
17082	jsonp: "callback",
17083	jsonpCallback: function() {
17084		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
17085		this[ callback ] = true;
17086		return callback;
17087	}
17088} );
17089
17090// Detect, normalize options and install callbacks for jsonp requests
17091jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
17092
17093	var callbackName, overwritten, responseContainer,
17094		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
17095			"url" :
17096			typeof s.data === "string" &&
17097				( s.contentType || "" )
17098					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
17099				rjsonp.test( s.data ) && "data"
17100		);
17101
17102	// Handle iff the expected data type is "jsonp" or we have a parameter to set
17103	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
17104
17105		// Get callback name, remembering preexisting value associated with it
17106		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
17107			s.jsonpCallback() :
17108			s.jsonpCallback;
17109
17110		// Insert callback into url or form data
17111		if ( jsonProp ) {
17112			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
17113		} else if ( s.jsonp !== false ) {
17114			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
17115		}
17116
17117		// Use data converter to retrieve json after script execution
17118		s.converters[ "script json" ] = function() {
17119			if ( !responseContainer ) {
17120				jQuery.error( callbackName + " was not called" );
17121			}
17122			return responseContainer[ 0 ];
17123		};
17124
17125		// Force json dataType
17126		s.dataTypes[ 0 ] = "json";
17127
17128		// Install callback
17129		overwritten = window[ callbackName ];
17130		window[ callbackName ] = function() {
17131			responseContainer = arguments;
17132		};
17133
17134		// Clean-up function (fires after converters)
17135		jqXHR.always( function() {
17136
17137			// If previous value didn't exist - remove it
17138			if ( overwritten === undefined ) {
17139				jQuery( window ).removeProp( callbackName );
17140
17141			// Otherwise restore preexisting value
17142			} else {
17143				window[ callbackName ] = overwritten;
17144			}
17145
17146			// Save back as free
17147			if ( s[ callbackName ] ) {
17148
17149				// Make sure that re-using the options doesn't screw things around
17150				s.jsonpCallback = originalSettings.jsonpCallback;
17151
17152				// Save the callback name for future use
17153				oldCallbacks.push( callbackName );
17154			}
17155
17156			// Call if it was a function and we have a response
17157			if ( responseContainer && isFunction( overwritten ) ) {
17158				overwritten( responseContainer[ 0 ] );
17159			}
17160
17161			responseContainer = overwritten = undefined;
17162		} );
17163
17164		// Delegate to script
17165		return "script";
17166	}
17167} );
17168
17169
17170
17171
17172// Support: Safari 8 only
17173// In Safari 8 documents created via document.implementation.createHTMLDocument
17174// collapse sibling forms: the second one becomes a child of the first one.
17175// Because of that, this security measure has to be disabled in Safari 8.
17176// https://bugs.webkit.org/show_bug.cgi?id=137337
17177support.createHTMLDocument = ( function() {
17178	var body = document.implementation.createHTMLDocument( "" ).body;
17179	body.innerHTML = "<form></form><form></form>";
17180	return body.childNodes.length === 2;
17181} )();
17182
17183
17184// Argument "data" should be string of html
17185// context (optional): If specified, the fragment will be created in this context,
17186// defaults to document
17187// keepScripts (optional): If true, will include scripts passed in the html string
17188jQuery.parseHTML = function( data, context, keepScripts ) {
17189	if ( typeof data !== "string" ) {
17190		return [];
17191	}
17192	if ( typeof context === "boolean" ) {
17193		keepScripts = context;
17194		context = false;
17195	}
17196
17197	var base, parsed, scripts;
17198
17199	if ( !context ) {
17200
17201		// Stop scripts or inline event handlers from being executed immediately
17202		// by using document.implementation
17203		if ( support.createHTMLDocument ) {
17204			context = document.implementation.createHTMLDocument( "" );
17205
17206			// Set the base href for the created document
17207			// so any parsed elements with URLs
17208			// are based on the document's URL (gh-2965)
17209			base = context.createElement( "base" );
17210			base.href = document.location.href;
17211			context.head.appendChild( base );
17212		} else {
17213			context = document;
17214		}
17215	}
17216
17217	parsed = rsingleTag.exec( data );
17218	scripts = !keepScripts && [];
17219
17220	// Single tag
17221	if ( parsed ) {
17222		return [ context.createElement( parsed[ 1 ] ) ];
17223	}
17224
17225	parsed = buildFragment( [ data ], context, scripts );
17226
17227	if ( scripts && scripts.length ) {
17228		jQuery( scripts ).remove();
17229	}
17230
17231	return jQuery.merge( [], parsed.childNodes );
17232};
17233
17234
17235/**
17236 * Load a url into a page
17237 */
17238jQuery.fn.load = function( url, params, callback ) {
17239	var selector, type, response,
17240		self = this,
17241		off = url.indexOf( " " );
17242
17243	if ( off > -1 ) {
17244		selector = stripAndCollapse( url.slice( off ) );
17245		url = url.slice( 0, off );
17246	}
17247
17248	// If it's a function
17249	if ( isFunction( params ) ) {
17250
17251		// We assume that it's the callback
17252		callback = params;
17253		params = undefined;
17254
17255	// Otherwise, build a param string
17256	} else if ( params && typeof params === "object" ) {
17257		type = "POST";
17258	}
17259
17260	// If we have elements to modify, make the request
17261	if ( self.length > 0 ) {
17262		jQuery.ajax( {
17263			url: url,
17264
17265			// If "type" variable is undefined, then "GET" method will be used.
17266			// Make value of this field explicit since
17267			// user can override it through ajaxSetup method
17268			type: type || "GET",
17269			dataType: "html",
17270			data: params
17271		} ).done( function( responseText ) {
17272
17273			// Save response for use in complete callback
17274			response = arguments;
17275
17276			self.html( selector ?
17277
17278				// If a selector was specified, locate the right elements in a dummy div
17279				// Exclude scripts to avoid IE 'Permission Denied' errors
17280				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
17281
17282				// Otherwise use the full result
17283				responseText );
17284
17285		// If the request succeeds, this function gets "data", "status", "jqXHR"
17286		// but they are ignored because response was set above.
17287		// If it fails, this function gets "jqXHR", "status", "error"
17288		} ).always( callback && function( jqXHR, status ) {
17289			self.each( function() {
17290				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
17291			} );
17292		} );
17293	}
17294
17295	return this;
17296};
17297
17298
17299
17300
17301jQuery.expr.pseudos.animated = function( elem ) {
17302	return jQuery.grep( jQuery.timers, function( fn ) {
17303		return elem === fn.elem;
17304	} ).length;
17305};
17306
17307
17308
17309
17310jQuery.offset = {
17311	setOffset: function( elem, options, i ) {
17312		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
17313			position = jQuery.css( elem, "position" ),
17314			curElem = jQuery( elem ),
17315			props = {};
17316
17317		// Set position first, in-case top/left are set even on static elem
17318		if ( position === "static" ) {
17319			elem.style.position = "relative";
17320		}
17321
17322		curOffset = curElem.offset();
17323		curCSSTop = jQuery.css( elem, "top" );
17324		curCSSLeft = jQuery.css( elem, "left" );
17325		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
17326			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
17327
17328		// Need to be able to calculate position if either
17329		// top or left is auto and position is either absolute or fixed
17330		if ( calculatePosition ) {
17331			curPosition = curElem.position();
17332			curTop = curPosition.top;
17333			curLeft = curPosition.left;
17334
17335		} else {
17336			curTop = parseFloat( curCSSTop ) || 0;
17337			curLeft = parseFloat( curCSSLeft ) || 0;
17338		}
17339
17340		if ( isFunction( options ) ) {
17341
17342			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
17343			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
17344		}
17345
17346		if ( options.top != null ) {
17347			props.top = ( options.top - curOffset.top ) + curTop;
17348		}
17349		if ( options.left != null ) {
17350			props.left = ( options.left - curOffset.left ) + curLeft;
17351		}
17352
17353		if ( "using" in options ) {
17354			options.using.call( elem, props );
17355
17356		} else {
17357			curElem.css( props );
17358		}
17359	}
17360};
17361
17362jQuery.fn.extend( {
17363
17364	// offset() relates an element's border box to the document origin
17365	offset: function( options ) {
17366
17367		// Preserve chaining for setter
17368		if ( arguments.length ) {
17369			return options === undefined ?
17370				this :
17371				this.each( function( i ) {
17372					jQuery.offset.setOffset( this, options, i );
17373				} );
17374		}
17375
17376		var rect, win,
17377			elem = this[ 0 ];
17378
17379		if ( !elem ) {
17380			return;
17381		}
17382
17383		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
17384		// Support: IE <=11 only
17385		// Running getBoundingClientRect on a
17386		// disconnected node in IE throws an error
17387		if ( !elem.getClientRects().length ) {
17388			return { top: 0, left: 0 };
17389		}
17390
17391		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
17392		rect = elem.getBoundingClientRect();
17393		win = elem.ownerDocument.defaultView;
17394		return {
17395			top: rect.top + win.pageYOffset,
17396			left: rect.left + win.pageXOffset
17397		};
17398	},
17399
17400	// position() relates an element's margin box to its offset parent's padding box
17401	// This corresponds to the behavior of CSS absolute positioning
17402	position: function() {
17403		if ( !this[ 0 ] ) {
17404			return;
17405		}
17406
17407		var offsetParent, offset, doc,
17408			elem = this[ 0 ],
17409			parentOffset = { top: 0, left: 0 };
17410
17411		// position:fixed elements are offset from the viewport, which itself always has zero offset
17412		if ( jQuery.css( elem, "position" ) === "fixed" ) {
17413
17414			// Assume position:fixed implies availability of getBoundingClientRect
17415			offset = elem.getBoundingClientRect();
17416
17417		} else {
17418			offset = this.offset();
17419
17420			// Account for the *real* offset parent, which can be the document or its root element
17421			// when a statically positioned element is identified
17422			doc = elem.ownerDocument;
17423			offsetParent = elem.offsetParent || doc.documentElement;
17424			while ( offsetParent &&
17425				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
17426				jQuery.css( offsetParent, "position" ) === "static" ) {
17427
17428				offsetParent = offsetParent.parentNode;
17429			}
17430			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
17431
17432				// Incorporate borders into its offset, since they are outside its content origin
17433				parentOffset = jQuery( offsetParent ).offset();
17434				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
17435				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
17436			}
17437		}
17438
17439		// Subtract parent offsets and element margins
17440		return {
17441			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
17442			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
17443		};
17444	},
17445
17446	// This method will return documentElement in the following cases:
17447	// 1) For the element inside the iframe without offsetParent, this method will return
17448	//    documentElement of the parent window
17449	// 2) For the hidden or detached element
17450	// 3) For body or html element, i.e. in case of the html node - it will return itself
17451	//
17452	// but those exceptions were never presented as a real life use-cases
17453	// and might be considered as more preferable results.
17454	//
17455	// This logic, however, is not guaranteed and can change at any point in the future
17456	offsetParent: function() {
17457		return this.map( function() {
17458			var offsetParent = this.offsetParent;
17459
17460			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
17461				offsetParent = offsetParent.offsetParent;
17462			}
17463
17464			return offsetParent || documentElement;
17465		} );
17466	}
17467} );
17468
17469// Create scrollLeft and scrollTop methods
17470jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
17471	var top = "pageYOffset" === prop;
17472
17473	jQuery.fn[ method ] = function( val ) {
17474		return access( this, function( elem, method, val ) {
17475
17476			// Coalesce documents and windows
17477			var win;
17478			if ( isWindow( elem ) ) {
17479				win = elem;
17480			} else if ( elem.nodeType === 9 ) {
17481				win = elem.defaultView;
17482			}
17483
17484			if ( val === undefined ) {
17485				return win ? win[ prop ] : elem[ method ];
17486			}
17487
17488			if ( win ) {
17489				win.scrollTo(
17490					!top ? val : win.pageXOffset,
17491					top ? val : win.pageYOffset
17492				);
17493
17494			} else {
17495				elem[ method ] = val;
17496			}
17497		}, method, val, arguments.length );
17498	};
17499} );
17500
17501// Support: Safari <=7 - 9.1, Chrome <=37 - 49
17502// Add the top/left cssHooks using jQuery.fn.position
17503// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
17504// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
17505// getComputedStyle returns percent when specified for top/left/bottom/right;
17506// rather than make the css module depend on the offset module, just check for it here
17507jQuery.each( [ "top", "left" ], function( _i, prop ) {
17508	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
17509		function( elem, computed ) {
17510			if ( computed ) {
17511				computed = curCSS( elem, prop );
17512
17513				// If curCSS returns percentage, fallback to offset
17514				return rnumnonpx.test( computed ) ?
17515					jQuery( elem ).position()[ prop ] + "px" :
17516					computed;
17517			}
17518		}
17519	);
17520} );
17521
17522
17523// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
17524jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
17525	jQuery.each( {
17526		padding: "inner" + name,
17527		content: type,
17528		"": "outer" + name
17529	}, function( defaultExtra, funcName ) {
17530
17531		// Margin is only for outerHeight, outerWidth
17532		jQuery.fn[ funcName ] = function( margin, value ) {
17533			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
17534				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
17535
17536			return access( this, function( elem, type, value ) {
17537				var doc;
17538
17539				if ( isWindow( elem ) ) {
17540
17541					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
17542					return funcName.indexOf( "outer" ) === 0 ?
17543						elem[ "inner" + name ] :
17544						elem.document.documentElement[ "client" + name ];
17545				}
17546
17547				// Get document width or height
17548				if ( elem.nodeType === 9 ) {
17549					doc = elem.documentElement;
17550
17551					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
17552					// whichever is greatest
17553					return Math.max(
17554						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
17555						elem.body[ "offset" + name ], doc[ "offset" + name ],
17556						doc[ "client" + name ]
17557					);
17558				}
17559
17560				return value === undefined ?
17561
17562					// Get width or height on the element, requesting but not forcing parseFloat
17563					jQuery.css( elem, type, extra ) :
17564
17565					// Set width or height on the element
17566					jQuery.style( elem, type, value, extra );
17567			}, type, chainable ? margin : undefined, chainable );
17568		};
17569	} );
17570} );
17571
17572
17573jQuery.each( [
17574	"ajaxStart",
17575	"ajaxStop",
17576	"ajaxComplete",
17577	"ajaxError",
17578	"ajaxSuccess",
17579	"ajaxSend"
17580], function( _i, type ) {
17581	jQuery.fn[ type ] = function( fn ) {
17582		return this.on( type, fn );
17583	};
17584} );
17585
17586
17587
17588
17589jQuery.fn.extend( {
17590
17591	bind: function( types, data, fn ) {
17592		return this.on( types, null, data, fn );
17593	},
17594	unbind: function( types, fn ) {
17595		return this.off( types, null, fn );
17596	},
17597
17598	delegate: function( selector, types, data, fn ) {
17599		return this.on( types, selector, data, fn );
17600	},
17601	undelegate: function( selector, types, fn ) {
17602
17603		// ( namespace ) or ( selector, types [, fn] )
17604		return arguments.length === 1 ?
17605			this.off( selector, "**" ) :
17606			this.off( types, selector || "**", fn );
17607	},
17608
17609	hover: function( fnOver, fnOut ) {
17610		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
17611	}
17612} );
17613
17614jQuery.each(
17615	( "blur focus focusin focusout resize scroll click dblclick " +
17616	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
17617	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
17618	function( _i, name ) {
17619
17620		// Handle event binding
17621		jQuery.fn[ name ] = function( data, fn ) {
17622			return arguments.length > 0 ?
17623				this.on( name, null, data, fn ) :
17624				this.trigger( name );
17625		};
17626	}
17627);
17628
17629
17630
17631
17632// Support: Android <=4.0 only
17633// Make sure we trim BOM and NBSP
17634var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
17635
17636// Bind a function to a context, optionally partially applying any
17637// arguments.
17638// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
17639// However, it is not slated for removal any time soon
17640jQuery.proxy = function( fn, context ) {
17641	var tmp, args, proxy;
17642
17643	if ( typeof context === "string" ) {
17644		tmp = fn[ context ];
17645		context = fn;
17646		fn = tmp;
17647	}
17648
17649	// Quick check to determine if target is callable, in the spec
17650	// this throws a TypeError, but we will just return undefined.
17651	if ( !isFunction( fn ) ) {
17652		return undefined;
17653	}
17654
17655	// Simulated bind
17656	args = slice.call( arguments, 2 );
17657	proxy = function() {
17658		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
17659	};
17660
17661	// Set the guid of unique handler to the same of original handler, so it can be removed
17662	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
17663
17664	return proxy;
17665};
17666
17667jQuery.holdReady = function( hold ) {
17668	if ( hold ) {
17669		jQuery.readyWait++;
17670	} else {
17671		jQuery.ready( true );
17672	}
17673};
17674jQuery.isArray = Array.isArray;
17675jQuery.parseJSON = JSON.parse;
17676jQuery.nodeName = nodeName;
17677jQuery.isFunction = isFunction;
17678jQuery.isWindow = isWindow;
17679jQuery.camelCase = camelCase;
17680jQuery.type = toType;
17681
17682jQuery.now = Date.now;
17683
17684jQuery.isNumeric = function( obj ) {
17685
17686	// As of jQuery 3.0, isNumeric is limited to
17687	// strings and numbers (primitives or objects)
17688	// that can be coerced to finite numbers (gh-2662)
17689	var type = jQuery.type( obj );
17690	return ( type === "number" || type === "string" ) &&
17691
17692		// parseFloat NaNs numeric-cast false positives ("")
17693		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
17694		// subtraction forces infinities to NaN
17695		!isNaN( obj - parseFloat( obj ) );
17696};
17697
17698jQuery.trim = function( text ) {
17699	return text == null ?
17700		"" :
17701		( text + "" ).replace( rtrim, "" );
17702};
17703
17704
17705
17706// Register as a named AMD module, since jQuery can be concatenated with other
17707// files that may use define, but not via a proper concatenation script that
17708// understands anonymous AMD modules. A named AMD is safest and most robust
17709// way to register. Lowercase jquery is used because AMD module names are
17710// derived from file names, and jQuery is normally delivered in a lowercase
17711// file name. Do this after creating the global so that if an AMD module wants
17712// to call noConflict to hide this version of jQuery, it will work.
17713
17714// Note that for maximum portability, libraries that are not jQuery should
17715// declare themselves as anonymous modules, and avoid setting a global if an
17716// AMD loader is present. jQuery is a special case. For more information, see
17717// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
17718
17719if ( true ) {
17720	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
17721		return jQuery;
17722	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
17723		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
17724}
17725
17726
17727
17728
17729var
17730
17731	// Map over jQuery in case of overwrite
17732	_jQuery = window.jQuery,
17733
17734	// Map over the $ in case of overwrite
17735	_$ = window.$;
17736
17737jQuery.noConflict = function( deep ) {
17738	if ( window.$ === jQuery ) {
17739		window.$ = _$;
17740	}
17741
17742	if ( deep && window.jQuery === jQuery ) {
17743		window.jQuery = _jQuery;
17744	}
17745
17746	return jQuery;
17747};
17748
17749// Expose jQuery and $ identifiers, even in AMD
17750// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
17751// and CommonJS for browser emulators (#13566)
17752if ( typeof noGlobal === "undefined" ) {
17753	window.jQuery = window.$ = jQuery;
17754}
17755
17756
17757
17758
17759return jQuery;
17760} );
17761
17762
17763/***/ })
vendor: 2,637 bytes, lines 17763-17837
17763
17764
17765/******/ 	});
17766/************************************************************************/
17767/******/ 	// The module cache
17768/******/ 	var __webpack_module_cache__ = {};
17769/******/ 	
17770/******/ 	// The require function
17771/******/ 	function __webpack_require__(moduleId) {
17772/******/ 		// Check if module is in cache
17773/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
17774/******/ 		if (cachedModule !== undefined) {
17775/******/ 			return cachedModule.exports;
17776/******/ 		}
17777/******/ 		// Create a new module (and put it into the cache)
17778/******/ 		var module = __webpack_module_cache__[moduleId] = {
17779/******/ 			id: moduleId,
17780/******/ 			loaded: false,
17781/******/ 			exports: {}
17782/******/ 		};
17783/******/ 	
17784/******/ 		// Execute the module function
17785/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
17786/******/ 	
17787/******/ 		// Flag the module as loaded
17788/******/ 		module.loaded = true;
17789/******/ 	
17790/******/ 		// Return the exports of the module
17791/******/ 		return module.exports;
17792/******/ 	}
17793/******/ 	
17794/************************************************************************/
17795/******/ 	/* webpack/runtime/node module decorator */
17796/******/ 	(() => {
17797/******/ 		__webpack_require__.nmd = (module) => {
17798/******/ 			module.paths = [];
17799/******/ 			if (!module.children) module.children = [];
17800/******/ 			return module;
17801/******/ 		};
17802/******/ 	})();
17803/******/ 	
17804/************************************************************************/
17805var __webpack_exports__ = {};
17806// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
17807(() => {
17808/*!******************************!*\
17809  !*** ./resources/js/site.js ***!
17810  \******************************/
17811//require('jquery');
17812//require('popper.js');
17813//require('./bootstrap');
17814//require('@coreui/coreui');
17815window.$ = window.jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
17816
17817__webpack_require__(/*! ./jquery.min.js */ "./resources/js/jquery.min.js");
17818
17819__webpack_require__(/*! ./bootstrap.min.js */ "./resources/js/bootstrap.min.js");
17820
17821__webpack_require__(/*! ./navigation.js */ "./resources/js/navigation.js");
17822
17823__webpack_require__(/*! ./menumaker.js */ "./resources/js/menumaker.js");
17824
17825__webpack_require__(/*! ./jquery.sticky.js */ "./resources/js/jquery.sticky.js");
17826/*require('./sticky-header.js');*/
17827
17828
17829__webpack_require__(/*! ./owl.carousel.min.js */ "./resources/js/owl.carousel.min.js");
17830
17831__webpack_require__(/*! ./slider.js */ "./resources/js/slider.js");
17832
17833__webpack_require__(/*! ./testimonial-slider.js */ "./resources/js/testimonial-slider.js");
17834})();
17835
17836/******/ })()
17837;

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